Architecture 是否建议采用2层和3层混合体系结构

Architecture 是否建议采用2层和3层混合体系结构,architecture,Architecture,我正在制作一个web应用程序,它将各种业务规则作为输入并存储在数据库中。这是使用3层体系结构完成的 之后,我必须在一个操作中使用所有这些业务规则,因此我在存储过程中编写这部分的业务逻辑,并从UI调用它,使其成为两层 由于这是一种罕见的情况,即一次操作需要所有数据(这是一个相当大的数据量——SP本身需要大约6分钟的时间来处理),因此仅为了维护体系结构完整性而将所有数据作为对象提取到BLL中对我来说没有什么意义。此外,SP中的逻辑是迭代的,因此所有数据都需要在BLL中维护,并且不能有条件地获取 请建

我正在制作一个web应用程序,它将各种业务规则作为输入并存储在数据库中。这是使用3层体系结构完成的

之后,我必须在一个操作中使用所有这些业务规则,因此我在存储过程中编写这部分的业务逻辑,并从UI调用它,使其成为两层

由于这是一种罕见的情况,即一次操作需要所有数据(这是一个相当大的数据量——SP本身需要大约6分钟的时间来处理),因此仅为了维护体系结构完整性而将所有数据作为对象提取到BLL中对我来说没有什么意义。此外,SP中的逻辑是迭代的,因此所有数据都需要在BLL中维护,并且不能有条件地获取


请建议我是否有正确的方法。

业务逻辑属于最合适的领域。如果您有与数据关联的逻辑,并且该逻辑仅由存储过程执行,那么数据库就是保存它的合适位置

业务逻辑属于最合适的领域。如果您有与数据关联的逻辑,并且该逻辑仅由存储过程执行,那么数据库就是保存它的合适位置

@APC是正确的,逻辑应该位于最合适的位置-并且:

  • UI仍然应该通过BL层来获取数据,以便应用程序的结构保持一致
  • 如果你想在应用程序中的不同位置拥有逻辑(为了满足某些要求,比如性能),你应该清楚地记录这些控制因素是什么,并且应该很容易让开发人员跟进
想到两个选项(关于结构):

  • 确保应用程序结构适当且清晰的一种方法是通过接口隔离特定的“繁重”任务。理想情况下,您的所有数据访问都应该由接口抽象出来,并且这些接口应该分解为逻辑区域(请参阅-ISP)。因此,您可以为特定的数据访问需求提供专用接口:[BL]->[IDataAccess]->[Concrete data access]
  • 另一种方法(但也是类似的):不要让BL像常规数据访问一样访问这些特殊数据调用,而是将其作为BL包含或注入
如何执行第二种方法:定义一个接口(在BL层中),该接口将由其他业务对象使用:[BL Object]->[ISPSpecialBusinessLogic]->[Concrete Implementation]。具体的业务逻辑可以是任何东西——但在您的情况下,它将是对一个特殊数据访问方法/组件的调用,您可以在该方法/组件中完成“繁重的工作”


当您实现数据访问时,您可以选择在单个类/组件(实现多个接口)或单独的类/组件(每个类/组件实现一个接口)中完成所有操作。

@APC是正确的,逻辑应该位于最合适的位置-并且:

  • UI仍然应该通过BL层来获取数据,以便应用程序的结构保持一致
  • 如果你想在应用程序中的不同位置拥有逻辑(为了满足某些要求,比如性能),你应该清楚地记录这些控制因素是什么,并且应该很容易让开发人员跟进
想到两个选项(关于结构):

  • 确保应用程序结构适当且清晰的一种方法是通过接口隔离特定的“繁重”任务。理想情况下,您的所有数据访问都应该由接口抽象出来,并且这些接口应该分解为逻辑区域(请参阅-ISP)。因此,您可以为特定的数据访问需求提供专用接口:[BL]->[IDataAccess]->[Concrete data access]
  • 另一种方法(但也是类似的):不要让BL像常规数据访问一样访问这些特殊数据调用,而是将其作为BL包含或注入
如何执行第二种方法:定义一个接口(在BL层中),该接口将由其他业务对象使用:[BL Object]->[ISPSpecialBusinessLogic]->[Concrete Implementation]。具体的业务逻辑可以是任何东西——但在您的情况下,它将是对一个特殊数据访问方法/组件的调用,您可以在该方法/组件中完成“繁重的工作”


当您实现数据访问时,您可以选择在单个类/组件(实现多个接口)或单独的类/组件(每个类/组件实现一个接口)中完成所有操作。

我假设您的应用程序的其他模块也维护三层架构。因此,为了保证一致性和可维护性,您应该维护三层体系结构


此外,在将来,如果您需要对SP返回的数据应用某些业务逻辑,您将在BL中执行这些操作。

我假设您的应用程序的其他模块也维护3-TIE体系结构。因此,为了保证一致性和可维护性,您应该维护三层体系结构

此外,在将来,如果您需要对SP返回的数据应用某些业务逻辑,您将在BL中这样做