MVVM和业务层架构

本文关键字:业务 MVVM | 更新日期: 2023-09-27 18:05:40

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

  • 领域层-在领域驱动设计的方式,所以我有一些逻辑在这里
  • 数据访问层-使用nhibernate和UnitOfWork - Repository模式
  • UI层- MVVM与Caliburn。微

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

根据

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

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

我有一个ViewModel,只收取一个人从数据库,并允许更改,那么我将有3个方法(保持简单的例子):

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

前2个必须调用我的UoW的相应方法,但必须直接这样做?

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

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

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

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

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

MVVM和业务层架构

您也可以在这里创建一个模型,并在其中声明属性和方法。像

 public class Person
    {
   //Declare your property
     LoadPerson ( id )
     {
      }
     SavePerson (Person )
     { 
      }
     CanEditPerson ( id )
     {
      }
    }

现在你只需要在你的ViewModel中创建Property of Person类,这样你就可以很容易地访问他们的属性和方法。

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