具有3层架构的分层应用程序的良好实现方法?

时间:2012-09-15 13:45:52

标签: asp.net-mvc entity-framework 3-tier layered

我正在使用MVC3和Entity Framework开发应用程序。它是一种三层方法,在Web服务器中托管表示层,在Application Server中托管业务层和数据访问层。我们没有将对象上下文暴露给表示层或业务层。对象上下文仅包含在数据访问层中,并将数据访问和数据持久性公开为数据访问层方法的功能(即数据访问逻辑仅在数据访问层中分离和实现)。业务层调用数据访问层方法并将数据返回到表示层。

我担心的是,大多数业务层方法仅用于访问数据,而只是将调用转发到数据访问层而不进行任何操作。所以我们在两个层中重复代码。我们是否有其他更好的方法来避免这种重复。

在分层方法中实现业务层中的数据访问逻辑是一种好习惯吗?

有人可以为具有3层架构的分层应用程序提出一个好的实现方法吗?

3 个答案:

答案 0 :(得分:2)

如果您发现业务层所做的一切都只是将调用委托给数据访问层,那么这表明该业务层可能不是您的应用程序所必需的,因为它不会带来额外的价值。您可以摆脱它并让控制器直接与数据访问层对话(当然是通过抽象) - 这就是大多数教程在EF数据上下文中显示的内容。

在主要由CRUD操作组成的简单应用程序中,可能不需要业务层。随着您的应用程序变得越来越复杂,您可能决定稍后引入它,但不要从一开始就做太多的抽象,特别是如果这些抽象没有为您带来任何额外的价值。

答案 1 :(得分:2)

如前所述,没有“正确”的方式进行设置。多年来我发现了一些帮助我决定采取哪种方法的事情。

<强>双分层

如果您的商店存储过程繁重,有很多数据库程序员,并且倾向于将业务逻辑放在数据库中,那么请采用双层方法。在这种情况下,您会发现业务层通常只是调用数据层。此外,如果您的代码库和页面往往很小而且您从不重复功能,那么请采用两层方法。你会节省很多时间。

<强>三层

如果您的商店喜欢在代码中拥有大量业务逻辑,并且逻辑在任何地方重复,那么请使用三层。即使您注意到很多业务层只是调用数据层,随着时间的推移,当您添加功能时,只需将代码添加到业务层就会轻松得多。此外,如果你有一个庞大的代码库,有大量的页面,有很多重复的逻辑,那么我肯定会采用这种方法。

在我的工作中,我在企业级应用程序中找到了两者的混合体。有问题的领域是使用动态sql(gag)并且反复重复业务逻辑的领域。我发现,当我重构时,我将此代码拉入一个三层架构,并在将来节省了大量时间,因为我可以重复使用它。

答案 2 :(得分:0)

我认为复制逻辑分离代码并不一定是坏事。时间到了,这将会有所回报。假设您将由Oracle替换SQL服务器。或者微软将提出Linq 2.0,一些实现将会改变。您将感谢自己将它分开,而那些从业务层调用数据库的人将不得不在两个地方进行修改--DAL和BLL。 物有所值。但同样,没有正确的答案,直到实用性,可用性,便利性,最重要的是让它与其目的相匹配。

希望这有帮助。