Pergunta

forma orientada vista do modelo de WPF de fazer as coisas faz com que seja muito tentador objetos de negócios é só usar na interface do usuário. Você já viu algum problema com isso? Por que ou por que você não faria isso?

Foi útil?

Solução

A orientação de equipes de produto da Microsoft (por exemplo, isso é o que a equipe de Mistura está usando) é a arquitetura Model-View-ViewModel, uma variante do padrão MVC popular. Um bom ponto de partida é http://blogs.msdn.com /johngossman/archive/2005/10/08/478683.aspx . Há também bons artigos de Dr. WPF sobre este tema.

Essencialmente, eles defendem para criar uma camada ViewModel que utiliza objetos de negócios de ligação-amigáveis, como ObservableCollection e similares.

Além disso, se você pode, eventualmente, avançar para o Silverlight 2, você pode querer manter o negócio objetos out da camada de interface do usuário para que você possa trocar tecnologia UI (até WPF e Silverlight se tornar código-fonte compatível).

Outras dicas

Eu acho que eu vê-lo sob uma luz diferente. Eu tento manter o máximo de interface do usuário quanto possível para que eu possa usar qualquer UI apresentação eu preciso (ie. Web, WPF, WinForms). Quanto mais lógica de negócios na camada de apresentação, mais você pode ter que reescrever mais tarde, se você migrar para uma interface diferente.

Não é um problema com objetos de negócios na interface do usuário, desde que tudo que você está fazendo é visualizar -los. Em outras palavras, se você quiser alterar as propriedades de um ou excluir um, ou criar um novo, você deve estar enviando uma mensagem para o controlador, apresentador, ou o que quer fazer isso; e os resultados devem ser actualizados na vista.

O que você não deve fazer é usar o método ToString de seus objetos (ou quaisquer outros métodos ou propriedades em seus objetos) para afetar a forma como eles serão exibidos no modo de exibição. Você deve usar DataTemplates para representar o ponto de vista de seus objetos. Se você precisar de uma representação mais complexa, você pode usar um IValueConverter para mudar o objeto em sua representação visual.

Não sendo um guru WPF, eu não posso ter certeza, mas a razão usual para a separação de seu M, V e C é para que você possa testar o independente controlador da vista, e o contrário.

Nada que você parar, é claro, mas deve ser muito mais testáveis ??(ou seja, testes de unidade) se é separado. O padrão MVP, que normalmente é o que MS promove, é mais orientada em torno do apresentador (ou seja, seu formulário WPF) ter mais controle, e isso é bom também ....

Dependendo da sua arquitetura de aplicativo ou o da maneira que você está planejando para reutilizar seus componentes e objetos, você pode escolher um certo grau de independência a partir da interface do usuário (neste caso WPF).

Aqui está um exemplo da minha experiência:

Eu tenho trabalhado com WPF só um pouco, em um projeto relativamente pequeno, onde o camada de negócios já foi definido, e nós apenas necessária para criar um usuário interface. Claro, a interface tinha definido suas regras e objetos próprios que estava trabalhando com, e porque o aplicativo foi definido apenas para UX optámos por criar a nossa própria objectos específicos, principalmente por que se estende DependencyObject (principalmente para fins Data Binding).

Algumas pessoas podem argumentar que não é ok a utilização dependência objetos porque eles não são serializáveis ??(na verdade eles são - para XAML), eles trazem uma dependência de WPF (o namespace System.Windows), e alguns outros argumentos. Além disso, apoio DependencyObjects outra opções, como propriedades anexadas e dependência propriedades . Outras pode gostar de usar, por exemplo, INotifyPropertyChanged se faz sentido, e outros podem dizer que todos esses padrões não pertencem a outra camada de interface. (Se você quiser saber mais existem algumas boas WPF ligação de dados artigos na biblioteca MSDN, incluindo as melhores práticas para perfomance e para a interface de usuário)

É uma espécie de ruim que a Microsoft optou por adicionar alguns dos presentinhos para o namespace System.Windows, em vez de, por exemplo, ao System.ComponentModel onde em minha opinião eles poderiam ter sido mais útil (fornecendo todos esses padrões importantes não só para WPF, mas para o .NET Framework).

Claro que isto é apenas o começo e muitos de nós sabemos que a coisa vai estar evoluindo para a direção certa no final. (Com o risco de ir off-topic:.. Tome quadro Silverlight 2.0, por exemplo Foi um lançamento apressado, com alguns dos objetos no modelo WPF desaparecidas e alguns não em seu lugar natural)

No final, tudo depende de você, o seu estilo de programação, suas decisões de arquitetura e seu conhecimento da tecnologia.

Se parece mais natural para fazê-lo de uma forma, que pelo livro, pense why you should e why should you not antes de tomar qualquer decisão!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top