MVVM和业务层架构

时间:2014-05-29 12:48:37

标签: c# wpf mvvm architecture business-logic

我正在开发一个我刚刚完成的应用程序:

  • 域层 - 以域驱动设计方式制作,所以我在这里有一些逻辑
  • 数据访问层 - 使用nhibernate和UnitOfWork - 存储库模式
  • UI层 - 使用Caliburn.Micro的MVVM

现在的问题是:我把逻辑放在哪里了?

根据

https://softwareengineering.stackexchange.com/questions/185448/mvvm-clarification

我必须从域逻辑中拆分应用程序逻辑,但我做了一个简单的例子:

我有一个ViewModel只能从数据库中收取费用并允许更改,那么我将有3个方法(仅保留示例):

LoadPerson ( id )
SavePerson (Person )
CanEditPerson ( id )

前2个必须调用UoW的相应方法,但必须直接调用吗?

在早期使用asp.net创建的应用程序中,我为每个页面创建了一个带有外观的businessLayer,因此页面调用了外观的LoadPerson,然后BL调用了LoadPerson数据访问层。

这是我在这里使用的正确方法吗?

但在这种情况下,页面非常复杂,并且处理各种对象:我有一个基于大约100个项目的应用程序的6页(完整的选项卡和手风琴)。

在这里我理解视图必须非常简单并且可能在单个对象上工作,然后我应该在BL中为每个ViewModel设置一个外观?

CanEditPerson必须是一种方法,用于验证为确定当前用户是否可以更改此人而建立的规则。似乎非常合乎逻辑的领域(买家必须建立pemessi)拥有版权,但我不知道如何在DomainLayer处理这个问题,我会更自然地在BusinessLayer中使用该方法

1 个答案:

答案 0 :(得分:0)

您还可以在此处创建一个模型,并在其中声明属性和方法。 喜欢

 public class Person
    {
   //Declare your property

     LoadPerson ( id )
     {

      }
     SavePerson (Person )
     { 

      }
     CanEditPerson ( id )
     {

      }
    }

现在你必须在ViewModel中创建Person类的属性,这样你就可以轻松地访问它们的属性以及方法。

private Person _PersonDetails;

public Person PersonDetails
{
    get { return _PersonDetails??(_PersonDetails=new Person());}
    set { _PersonDetails = value;}
}