C# 业务对象和业务逻辑之间的区别是什么

C# 业务对象和业务逻辑之间的区别是什么,c#,mvvm,C#,Mvvm,我正试图根据最佳实践构建我的WPF MVVM应用程序。我必须从大量现有代码开始,所以我没有选择立即解决所有结构缺陷。我喜欢下面的解决方案结构 这将解决方案分为以下几个项目:;BusinessLogic、BusinessObjects、基础架构(通用可重用实用程序)、WPF外壳和模块(使用IOC容器注入的应用程序组件) 我知道业务对象代表人类世界的实体,而业务逻辑是本问题中讨论的实现细节 因此,使用MVVM,业务对象是否只是变成了一个哑容器,除了等待外部业务逻辑更改其属性之外,它实际上什么都不

我正试图根据最佳实践构建我的WPF MVVM应用程序。我必须从大量现有代码开始,所以我没有选择立即解决所有结构缺陷。我喜欢下面的解决方案结构

这将解决方案分为以下几个项目:;BusinessLogic、BusinessObjects、基础架构(通用可重用实用程序)、WPF外壳和模块(使用IOC容器注入的应用程序组件)

我知道业务对象代表人类世界的实体,而业务逻辑是本问题中讨论的实现细节

因此,使用MVVM,业务对象是否只是变成了一个哑容器,除了等待外部业务逻辑更改其属性之外,它实际上什么都不做?我看不出如何将业务对象与业务逻辑解耦到能够将它们放在单独的程序集中

以以下极为简化的代码为例:

public class Chart
{

    private SizeChart _activeChartSize = new SizeChart();

    public void Draw() {
        //  Size the chart object
        _activeChartSize.Size(this);
        //  Do other draw related things
    }

}

public class SizeChart
{

    public void Size(Chart chartToSize) {
        //  Manipulate the chart object size
    }

}
在上述MVVM解决方案结构的上下文中(至少在我看来),SizeChart类将是业务逻辑,而Chart类将是业务对象,但将它们放在不同的项目中将是一个循环依赖关系。SizeChart类是业务逻辑还是业务对象?如果我采用这个建议的MVVM解决方案结构,SizeChart类应该位于解决方案结构中的什么位置

如果这对某些人来说是一个非常明显和简单的问题,那么表示歉意。但是,如果你不能从头开始,就很难知道如何最好地开始将结构不良的代码转换为结构良好的代码

业务对象是一个相当无定形的术语——它是DTO、POCO,还是它与一些业务逻辑的混合体

对我来说,我会考虑不同的东西--<代码>图表和<代码> SsieCase都是控件,而不是“业务对象”或“业务逻辑”。这并不是因为它们有听起来像UI的函数名,而是它们实际上在做UI或渲染相关的工作(调整大小和绘图)。在调用

Size
Draw
之前,这些控件使用的数据集合将是独立的,并将分配给控件


请注意,这个答案与MVVM无关,因为它有点像是在转移视线——你的问题与一般的n层设计更为密切相关,在n层设计中,你也加入了MVVM。

我最近在一个项目中遇到了类似的问题

我们有一个允许管理员创建组的web应用程序。所需的规则之一是不能创建两个同名的组。我们最终做的是创建一个非常基本的对象,一个组,然后创建一个名为GroupService的服务。GroupService执行规则检查,以便当用户调用GroupService.Save(Group)时,该服务将退出并检查具有名称的以前的组。如果找到该名称,将向用户返回一个错误,并且不会进行保存

在我们的例子中,层次结构是控制器有服务,服务有存储库,存储库最终提交到数据库。贯穿这些抽象的是模型组。但我们的模型不仅仅是一个“愚蠢”的对象。它确实包含数据字段本身的验证逻辑,并具有聚合属性以简化数据绑定

将此扩展到MVVM接受,我认为视图模型将具有包含业务逻辑的服务和要合并到视图中的模型。显然,视图将绑定到ViewModel,但ViewModel将绑定到模型对象的某个实例

业务对象:一种可理解的实体,在面向对象的计算机程序的n层体系结构中,是业务层中的参与者。 程序可以实现类,这些类通常以管理或执行行为的对象结束,而业务对象本身通常不做任何事情,而是持有一组实例变量或属性(也称为属性)以及与其他业务对象的关联,从而编织出表示业务关系的对象映射

业务逻辑层:业务逻辑层(BLL),也称为域层,是一种划分的软件工程实践。 在BLL中,对象可以进一步划分为业务流程(业务活动)和业务实体。业务流程对象通常实现控制器模式,即它们不包含数据元素,但具有协调业务实体之间交互的方法

因此,基本上,业务对象对实体(通常是真实世界中的对象,如Employee或Account)进行建模,而业务逻辑促进了业务对象之间以及其他应用程序层之间的交互

我认为最恰当的答案是由。他的答案是不要将业务逻辑与其对象分开,因为这会导致一个错误

虽然我认为Paul S Patterson提出的以下WPF MVVM解决方案结构是一个好的解决方案结构,但我不认为它适合所有人


如果您的业务对象是(例如)Linq to SQL,而不是更复杂的对象(例如可能与业务逻辑有更紧密耦合的复合对象),那么创建不同的业务逻辑和业务对象项目可能效果最好

我认为将业务逻辑与其对象分离不是一个好主意,因为这会导致一个错误。谢谢你的回答。Chart是一个POCO,特别是Interop.Excel.Chart的抽象。我同意一般的n层设计评论,尽管这个术语看起来很模糊,知道在本例中我特别指的是WPF MVVM并没有什么坏处。我得到了什么