Oop 如何设计业务逻辑层

Oop 如何设计业务逻辑层,oop,architecture,n-tier-architecture,Oop,Architecture,N Tier Architecture,说得很清楚,我不希望这个问题得到解决。很明显,解决这个问题是解决这个问题的一个重要方面。然而,我对架构良好的n层应用程序没有太多经验,我也不想以不规则的BLL结束 在撰写本文时,我们的业务逻辑基本上是一个混杂的线团。银河系之间的依赖关系混乱,相同的业务逻辑被多次复制。我现在的重点是从我们称之为数据访问层的东西中提取业务逻辑,以便定义可以订阅的已知事件。我想我想要支持事件驱动/反应式编程模型 我希望有一些可以实现的目标告诉我如何以一种非常适合业务逻辑的方式设计这些类集合。如果有什么东西可以区分好的

说得很清楚,我不希望这个问题得到解决。很明显,解决这个问题是解决这个问题的一个重要方面。然而,我对架构良好的n层应用程序没有太多经验,我也不想以不规则的BLL结束

在撰写本文时,我们的业务逻辑基本上是一个混杂的线团。银河系之间的依赖关系混乱,相同的业务逻辑被多次复制。我现在的重点是从我们称之为数据访问层的东西中提取业务逻辑,以便定义可以订阅的已知事件。我想我想要支持事件驱动/反应式编程模型

我希望有一些可以实现的目标告诉我如何以一种非常适合业务逻辑的方式设计这些类集合。如果有什么东西可以区分好的BLL和坏的BLL,我想多听听

作为一名经验丰富的程序员,但相当谦虚的架构师,我向社区成员征求建议

编辑1:
因此验证逻辑进入业务对象,但这意味着业务对象需要将验证错误/逻辑传回GUI。这让我开始考虑将业务操作作为对象而不是对象来实现,以提供更多关于操作必要性的元数据。我不太喜欢代码克隆。

看看这篇文章。我可以给你一些想法


这也可能有帮助

嗯,我可以告诉你我们用于一个相当大的以数据库为中心的应用程序的技术。我们有一个类,按照您的建议管理数据层,它的后缀是DL。我们有一个程序可以自动生成这个源文件(非常方便),不过这也意味着如果我们想扩展功能,您需要派生类,因为在重新生成源文件时,您会覆盖它

我们还有另一个文件端是OBJ,它简单地定义了数据层处理的实际数据库行

最后但并非最不重要的一点是,对于一个格式良好的基类,有一个以BS(代表业务逻辑)结尾的文件,这是唯一一个没有自动生成的文件,它定义了事件方法,例如“New”和“Save”,这样通过调用基类,默认操作就完成了。因此,任何与规范的偏差都可以在该文件中处理(包括在必要时完全重写默认功能)

您应该为每个表及其派生自该主表的子表(或子表)创建一组此类文件。您还需要一个包含所有对象全名的工厂,以便通过反射创建任何对象。因此,要修补程序,只需从基本功能派生并更新数据库中的一行,以便工厂创建该对象,而不是默认对象


希望这会有所帮助,不过我会留下一个社区wiki回复,这样也许你可以得到更多关于这个建议的反馈。

我发现一些领域驱动设计的实践在将复杂的业务逻辑分解为更易于管理/可测试的块时非常优秀

从以下链接查看示例代码:


DDD关注您的域层或BLL,如果您愿意,我希望它能有所帮助。

我们只是从架构的角度来讨论这个问题,它的要点是“抽象,抽象,抽象”


您可以使用来设计自顶向下的接口,并将接口定义传递给程序员团队。使用这样的方法论(或任何其他可视化技术)可视化依赖项可以防止您在项目中的任何地方复制业务逻辑。

这是一个广泛的问题。使用ORM技术(可能是NHibernate?)将数据库与业务逻辑(可怕的术语)分开。这让您大部分(显然)停留在OO领域,并且您可以从架构的角度忽略事物的DB方面

接下来,我发现领域驱动设计()是将复杂系统分解为可管理块的最成功的方法,尽管它没有得到尊重,但我真正发现UML——特别是动作图和类图——在理解和交流系统设计方面非常有用

一般建议:接口一切,从一开始就构建单元测试,并学会识别和分离可作为子系统存在的可重用服务组件。FWIW如果你们中有一大群人在做这件事,我也会同意并积极地使用stylecop:)

关于“编辑1”-我已经多次遇到过这个问题。我完全同意你的看法:在许多地方,必须进行相同的验证

我过去解决这个问题的方法是以某种方式封装验证规则。元数据/XML、独立对象等等。只要确保它是可以从业务对象请求的,可以在其他地方执行。这样,您只需编写一次验证代码,它可以由您的业务对象或UI对象执行,甚至可能由代码的第三方使用者执行

有一个警告:一些验证规则很容易封装/传输;例如,“姓氏是必填字段”。但是,某些验证规则可能过于复杂,涉及的对象太多,难以在元数据中轻松封装或描述:“只有当用户不是员工,并且订单在劳动节周末下,并且他们的购物车中有2到5件这种特殊类型的商品时,用户才可以包含优惠券,除非他们的购物车中也有这些其他商品,但前提是颜色是我们的‘首映销售’颜色之一,除了诸如此类。。。。“-你知道商业‘逻辑’是怎样的!;)

在这种情况下,我通常是绝对的