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
中使用该方法
您也可以在这里创建一个模型,并在其中声明属性和方法。像
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;}
}