Architecture 业务层逻辑(BLL)是关于数据的?

Architecture 业务层逻辑(BLL)是关于数据的?,architecture,business-logic,Architecture,Business Logic,我认为BLL是关于数据的。它不应包括名为SendEmail的方法。BLL是一个缓存数据、操纵数据、进行与业务相关的计算的地方。发送电子邮件是一个业务流程,但实际发送电子邮件的代码应该在BLL命名空间之外 BLL只是关于数据的吗?BLL代表您的业务逻辑层。它应该处理与业务逻辑层相关的任何事情。SendEmail在某种实用程序类中可能更好 此外,如果你告诉你的BLL关于一个电子邮件机制,你给了它太多的信息(紧密耦合,遵循demeter定律的功能,wiki/google it)。你的BLL不关心电子邮

我认为BLL是关于数据的。它不应包括名为SendEmail的方法。BLL是一个缓存数据、操纵数据、进行与业务相关的计算的地方。发送电子邮件是一个业务流程,但实际发送电子邮件的代码应该在BLL命名空间之外


BLL只是关于数据的吗?

BLL代表您的业务逻辑层。它应该处理与业务逻辑层相关的任何事情。SendEmail在某种实用程序类中可能更好

此外,如果你告诉你的BLL关于一个电子邮件机制,你给了它太多的信息(紧密耦合,遵循demeter定律的功能,wiki/google it)。你的BLL不关心电子邮件,也不应该关心它


当您提到数据时,您可能是在追求DAL(数据访问层)。这是处理数据插入/更新等返回到某些资源(如数据库)的层

BLL与数据无关……它与业务有关(因此业务逻辑层)

DAL是关于数据的


我可能会将SendMail方法移动到实用程序类中,但是您需要从BLL调用SendMail是完全合法的。

您的业务逻辑层应该处理与您的业务相关的事情,如果说您的业务层只与数据相关,那么就不太准确了。例如,许多人出于性能原因需要缓存数据,因此说缓存是特定于业务的是不正确的

但是,某些计算(例如计算报价)肯定可以算作业务逻辑,因为它们只针对您的业务


发送电子邮件绝对不是业务逻辑-这是一个相当通用的要求,当然不是特定于您的业务或行业。

如果您从层的角度来看,发送电子邮件更适合表示层,而不是业务逻辑或数据层

但是,发送电子邮件的触发可能来自业务层,业务层不应调用表示层

在这种情况下,一个潜在的解决方案是让业务层管理电子邮件队列,并让表示层管理接收和发送电子邮件


有时,严格遵守一种模式会导致比它试图解决的问题更多的问题。如果您发现一个具体的实施方案现在对您有效,并且在中短期内不会造成任何问题,并且调查和实施“完美”解决方案的成本太高,那么请继续使用您现有的方案

BLL不是关于数据的,而是关于需要对数据做什么 数据。

  • 用户将只与任何应用程序的前端表示形式进行交互,这通常被称为表示层

  • 数据将作为输入/输出显示或交换到此层,从各种数据源。这些源是数据库web服务。实际获取或发送这些数据到相应数据源的代码段就是我们所称的DAL-数据访问层

  • 在此期间,应用程序执行特殊操作,我们称之为应用程序需求用户需求。应用程序的这一战略性部分称为BLL,实际上解决了您正在开发应用程序的客户的需求

  • 如果数据需要存储在数据库中,BLL将DAL作为底层

  • BLL不知道数据源以及如何获取或发送数据。你有理由这么做。BLL只知道数据,它更多地以业务对象的形式出现,并且对数据的操作业务对象

  • BLL也不知道用户是在使用网站还是桌面应用程序。您有用于此的表示层


业务层应该包含保存业务信息的类。该层中的类应该代表您在软件中的业务。方法应该包含业务规则。业务层将保存、验证和操作数据,但底层数据访问层(DAL)将知道如何从数据库中添加、删除、获取和更新数据。业务层也不应该关心表示


在过去的团队中,我一直致力于独立的功能,这些功能可以出现在任何程序/业务中,比如在自己的通用类/方法中发送电子邮件。我唯一一次看到BLL类与电子邮件有任何联系是在编写业务规则以发送电子邮件时。在这种情况下,BLL知道要发送的电子邮件的文本,但实例化了发送电子邮件的通用电子邮件类

除非您的公司正在发送电子邮件。@alt-即使他的公司希望发送电子邮件,也不应在BLL中定义如何发送电子邮件。它应该分为一个实用类。谢谢,如果你在BLL中有一个名为SendEmail的方法,该方法实际上会做几件事1-使用名为Util的实用类,它会加密并发送电子邮件。2-通过DAL将发送状态插入数据库。在这种情况下,我会说BLL是该方法的正确位置…尽管名称可能更具描述性(以区别于实用程序样式的SendEmail方法)。