2010-05-11 122 views
4

当我在我们的网站中优化我们应用程序的架构时,我遇到了一个问题,我不知道最佳解决方案。业务逻辑分离

现在,在目前我们有基于此结构的小DLL:

Database <-> DAL <-> BLL 

的dal使用业务对象传递给BLL,将它传递给使用该DLL的应用程序。

只有BLL是公共的,因此任何包含此dll的应用程序都可以看到bll。

一开始,这对我们公司来说是一个很好的解决方案。 但是,当我们在该Dll上添加越来越多的应用程序时,Bll越大。现在我们不希望某些应用程序可以从其他应用程序中看到Bll逻辑。

现在我不知道最好的解决方案是什么。

我认为的第一件事是移动并将bll分隔到其他dll中,我可以将其包含在我的应用程序中。但是,那么Dal必须是公开的,所以其他的dll可以获取数据......而且我似乎是一个很好的解决方案。

我的另一个解决方案,就是在不同的命名空间中分隔bll,并且只包含应用程序中需要的命名空间。但是在这个解决方案中,如果你愿意,你可以直接访问其他的bll。

所以我在征求你的意见。

+0

您关心的是易用性还是安全性?即,您是否希望API的用户能够轻松地找到并使用他们感兴趣的BLL方法,或者您是否希望阻止访问某些方法?或两者? – 2010-05-11 15:34:55

+0

很高兴设置正确的答案。 – Erup 2010-05-21 16:04:17

+0

@ Tuzo:这很容易找到合适的bll,并且他们不会对其他bll做任何错误。对于迟到的回复抱歉,在这里没有看到您的评论。但谢谢你的问候!我不是一个普通的问题,而是一个普遍的问题。我不认为有一个真正正确的答案。但所有这些答案都帮助我解决了这个问题。我很高兴。 对于迟到的回复感到抱歉。 – bruno 2010-06-03 07:21:58

回答

3

我同意@MikeC。将名称空间中的BLL分隔为每个段。此外,也分开DAL,就像这样:

  • MyCompany.HumanResources.DAL
  • MyCompany.Insurance.DAL

另一件事要做的,就是分开DLL的。这样,你不需要公开DAL。它将成为每个系统的业务层(如WCF或Web服务),负责BLL和DAL,使支持和维护更容易。我不知道它是否是目前贵公司最经济实惠的方法(就复杂性而言),但它是一种更好的方法,用于设计目的的

以前的时间,在这里开发的应用程序在公司,使用组件结构 - 共享组件槽应用程序 - 。我们意识到,它不是最好的设计,今天许多系统(在生产环境中)都使用这种设计方法。此外:如果您想要更复杂一点,您还可以生成一个通用dbHelper组件,负责维护数据访问,包括控制连接,命令和事务的操作。这样,防止重写的代码。该组件可以使用企业库或其他组件。操作例子可能是:

public DbCommand CreateCommand() 
    { 
     if (this._baseCommand.Transaction != null) 
     { 
      DbCommand command = this._baseConnection.CreateCommand(); 
      command.Transaction = this._baseCommand.Transaction; 
      return command; 
     } 
     return this._baseConnection.CreateCommand(); 
    } 

你可以把它虚拟的,实现一个SqlCommand CreateCommand等。

记住:我公开的通用dbHelper的想法,只是一个想法

+0

对不起,如果帖子变得太复杂。但我认为它应该分析应用程序设计,而不仅仅是BLL,而是DAL和程序集的使用。 – Erup 2010-05-11 15:10:30

+0

Thx为理念!现在对我来说还是很复杂的,但是也许一年之后我会得到它:-D – bruno 2010-06-03 07:24:19

4

你应该为每个企业的 “片段” 一个独特的BLL和DAL ...例如:

  • MyCompany.HumanResources.BLL
  • MyCompany.Insurance.BLL
  • MyCompany.Accounting .BLL
+0

感谢您的回答,它帮助我创造了我的应用程序! – bruno 2010-06-03 07:26:38

2

我建议你根据它们的相关性(根据之前的文章)将你的业务逻辑分成不同的dll,这些类将实现特定的接口, s界面将在您的企业登录用户中声明。然后,我建议你实现容器(请参阅控制反转理论)来解决dll实现问题,这将允许您将业务逻辑实现从消耗中分离出来,并且您将能够毫无困难地用另一个实现替换某个实现。

我捍卫提供商与IoC的使用,而不是直接消耗业务经理类(想想可能导致噩梦的参考)。该解决方案解决了dll的隔离问题和优化的消耗。

+0

感谢您的回答,它帮助我创建了我的应用! – bruno 2010-06-03 07:25:33

2

这听起来像你有共同的业务逻辑,它通常适用于你的组织,而每个部门或部门更具体的逻辑。你可以设置你的代码,以便每个部门。只取决于它们的具体逻辑,后台使用“基本”逻辑中的任何通用功能。为此,您可以设置以下项目:

  • Business.BLL
  • Business.Finance.BLL
  • Business.IT.BLL
  • (等等,循环往复,等等。 ..)

请注意,它们中的每一个都可以是单独的项目,它可以编译为自己的程序集。一个部门只需要使用他们自己的程序集。

就数据访问而言,您可以在基本BLL中使用通用数据访问例程。您的特定BLL可以将自己的专用数据查询集中到基本BLL中,然后使用通用DAL并将结果返回到链中。

+0

感谢您的回答,它帮助我创建了我的应用程序! – bruno 2010-06-03 07:26:20