Какую платформу для MVVM я должен использовать? [закрытый]

Вот то, как я сделал это в школе. Я забыл, почему это не хорошая идея.

РЕДАКТИРОВАНИЕ:

@Darius Bacon: цитирует "Красивый Код" книга , которая содержит объяснение, почему любимый код не является хорошей идеей.

#!/usr/bin/env python
from __future__ import division

epsilon = 1e-6

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

class LineSegment:
    """
    >>> ls = LineSegment(Point(0,0), Point(2,4))
    >>> Point(1, 2) in ls
    True
    >>> Point(.5, 1) in ls
    True
    >>> Point(.5, 1.1) in ls
    False
    >>> Point(-1, -2) in ls
    False
    >>> Point(.1, 0.20000001) in ls
    True
    >>> Point(.1, 0.2001) in ls
    False
    >>> ls = LineSegment(Point(1, 1), Point(3, 5))
    >>> Point(2, 3) in ls
    True
    >>> Point(1.5, 2) in ls
    True
    >>> Point(0, -1) in ls
    False
    >>> ls = LineSegment(Point(1, 2), Point(1, 10))
    >>> Point(1, 6) in ls
    True
    >>> Point(1, 1) in ls
    False
    >>> Point(2, 6) in ls 
    False
    >>> ls = LineSegment(Point(-1, 10), Point(5, 10))
    >>> Point(3, 10) in ls
    True
    >>> Point(6, 10) in ls
    False
    >>> Point(5, 10) in ls
    True
    >>> Point(3, 11) in ls
    False
    """
    def __init__(self, a, b):
        if a.x > b.x:
            a, b = b, a
        (self.x0, self.y0, self.x1, self.y1) = (a.x, a.y, b.x, b.y)
        self.slope = (self.y1 - self.y0) / (self.x1 - self.x0) if self.x1 != self.x0 else None

    def __contains__(self, c):
        return (self.x0 <= c.x <= self.x1 and
                min(self.y0, self.y1) <= c.y <= max(self.y0, self.y1) and
                (not self.slope or -epsilon < (c.y - self.y(c.x)) < epsilon))

    def y(self, x):        
        return self.slope * (x - self.x0) + self.y0

if __name__ == '__main__':
    import  doctest
    doctest.testmod()

230
задан kenny 5 August 2019 в 01:14
поделиться

8 ответов

Это действительно зависит от того, чего вы пытаетесь достичь и от того, какой объем инфраструктуры вы уже хотите иметь, плюс легкость, с которой вы можете найти образцы, которые вам помогут. Я собираюсь заявить о своей заинтересованности здесь, потому что я активно участвовал по крайней мере в одной структуре MVVM, и у меня был вклад в другие через группу WPF Disciples, поэтому я немного предвзят. Сказав это, вот оно:

Microsofts MVVM Toolkit - это все еще находится на стадии альфа-тестирования. Когда он был первоначально выпущен, Disciples подверглись жестокому обращению с ним из-за того, чего он не делал. Сказав это, MS стремится усилить эту структуру, чтобы ее можно было посмотреть - она ​​просто еще не готова.

MVVM Foundation - ах, версия платформы Джоша Смита. Джош - один из отцов MVVM, он был большим сторонником и учителем этого шаблона. В результате на многих из того, что вы найдете в других фреймворках, есть отпечатки пальцев Джоша. Эта структура предназначена для обеспечения основ MVVM, а не для решения некоторых из более эзотерических проблем. Первоначально это было предназначено только для WPF, но такие люди, как Лоран Бугнион и я, добавили функциональные возможности / проекты, которые означают, что это будет также фреймворк, совместимый с Silverlight.

WAF - нет опыта, поэтому я могу ' Боюсь, что я не буду комментировать это.

MVVM Light - Лоран Бюньон только что обновил его до версии 2. Это очень хороший фреймворк, но, опять же, он не предназначен для охвата всех аспектов MVVM. Приложения. Учитывая прошлое Лорана, в нем очень сильная поддержка Silverlight и Blendability.

Обновление Лоран только что сообщил мне, что версии .NET 3.5 и .NET 4.0 совместимы по функциям. Wau to go Laurent.

Cinch - отличный фреймворк MVVM только для WPF от Саши Барбера. Это охватывает больше возможностей, чем фреймворки, о которых я говорил выше. Это отличный фреймворк, в котором используются концепции, описанные в прекрасном проекте Билла Кемпфа Onyx . Onyx предназначен для дополнения фреймворков MVVM и добавляет функциональность, которую обычно сложно реализовать в MVVM / WPF. Опять же, изначально предназначенный только для WPF, Onyx расширился и включает SL-совместимость - работу, в которой я особенно горжусь, что принимал участие.

Prism - Опять же, я никогда не использовал его, но слышал много хорошего об этом.

Оушен - Карл Шиффлетт, менеджер программы в группе Cider, недавно выпустил полнофункциональную платформу WPF MVVM. Опять же, это отличный фреймворк, и есть что порекомендовать.

Суть в том, что загрузите различные фреймворки, взгляните на них и определите, какая из них наиболее интуитивно соответствует вашему образу мышления и вашим требованиям. Если вы думаете, что вы можете захотеть поддерживать Silverlight из той же кодовой базы, тогда следует отказаться от фреймворков только для WPF.

Загрузите различные фреймворки, посмотрите на них и решите, какая из них наиболее интуитивно соответствует вашему образу мышления и вашим требованиям. Если вы думаете, что вы можете захотеть поддерживать Silverlight из той же кодовой базы, тогда следует отказаться от фреймворков только для WPF.

Загрузите различные фреймворки, посмотрите на них и решите, какая из них наиболее интуитивно соответствует вашему образу мышления и вашим требованиям. Если вы думаете, что вы можете захотеть поддерживать Silverlight из той же кодовой базы, тогда следует отказаться от фреймворков только для WPF.

194
ответ дан 23 November 2019 в 03:41
поделиться

Также посмотрите:

Caliburn & Onyx !

16
ответ дан 23 November 2019 в 03:41
поделиться

I try to describe the Frameworks missing in Pete’s great answer:

MVVM Toolkit (Microsoft) is a very lightweight library with Visual Studio project templates that should support beginners with this pattern. If Microsoft gets good feedback for their Toolkit then they might implement this as a new Visual Studio (maybe 2010) project template.

Prism (Microsoft p&p) is a framework that provides more than the support for the MVVM pattern. The main goal of this project is to help you to build modular WPF and/or Silverlight applications. When you just need to implement the MVVM pattern or you are a beginner in .NET/WPF I won’t recommend this project. See also: Link.

WPF Application Framework (WAF) is a lightweight framework that helps you to create WPF apps with MVVM. It’s just for WPF and so it doesn’t support Silverlight. It goes a bit another way than most other MVVM frameworks with the introduction of Controllers. They are responsible for the application workflow and they mediate between various ViewModels.

44
ответ дан 23 November 2019 в 03:41
поделиться

Если вам нужна расширяемость (возможность писать надстройки) поверх инфраструктуры приложений WPF / MVVM, то вас может заинтересовать SoapBox Core отказ от ответственности: я написал это . Он имеет открытый исходный код, поэтому, даже если вы его не используете, для вас могут быть найдены хорошие идеи. Он использует MEF как для расширяемости, так и для IoC.

1
ответ дан 23 November 2019 в 03:41
поделиться

Мех. Mvvm на самом деле не требует полной структуры для поддержки IMO. Если вы понимаете концепцию, довольно просто начать с чистого базового класса виртуальной машины, который реализует INotify, и просто продолжить работу.

19
ответ дан 23 November 2019 в 03:41
поделиться

Я сделаю ставку на Caliburn и MVVMlight, похоже, что не многие из этих фреймворков mvvm поддерживают silverlight. Я могу предвидеть, что будет больше фреймворков MVVM на выбор, чем фреймворков IoC, потому что сложнее настроить границу функций для фреймворка mvvm. Думаю, лучший способ узнать, какой из них лучше подходит для вашего проекта, - это перечислить / сравнить их характеристики.

Также ознакомьтесь с Mix10. Я многому научился из разговора: построение вашего mvvm-фреймворка.

8
ответ дан 23 November 2019 в 03:41
поделиться

В общем, я на 90% просмотрел свое приложение и все, что я использовал в MVVM Toolkit, - это фабричная функция, которая создает для меня команду с функцией делегата для запуска в Execute. Думаю, за пару часов я смогу переключиться на любой другой фреймворк или вообще без него.

2
ответ дан 23 November 2019 в 03:41
поделиться

Также есть nRoute

Действительно хорошая среда приложения для WPF / Silverlight, поддерживающая MVVM

1
ответ дан 23 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: