【问题标题】:Creating 3 -tier In MVC3在 MVC3 中创建 3 层
【发布时间】:2013-07-03 10:24:34
【问题描述】:

我正在创建一个简单的应用程序,其中用户注册他/她的姓名,注册后他/她重定向到登录页面,登录后他/她重定向到主页。 正如我所说的一个简单的应用程序.. 但我担心的是我想在 MVC3 中实现这个但是使用 3 层架构。为此我创建了一个 MVC3 项目,将其命名为 Presentation 并在解决方案下创建了一个新项目并将其命名为 DAL 并在 DAL 中移动了模型文件夹我已经在 Presentation 中创建了所有的属性和 DbContext 以及控制器和视图。那么任何人都可以告诉我在 BLL 文件夹中保留什么吗?请建议我!!!

【问题讨论】:

    标签: asp.net asp.net-mvc-3


    【解决方案1】:

    一种解决方案是使用 MVC 作为表示层(正如您现在正在做的那样)。在您的 MVC 内部,有时模型对您来说不够用,在这种情况下您需要创建 ViewModel。您可以将 ViewModel 移动到业务层,在这种情况下,当 BLL 从 DAL 检索数据时,它会将其转换为具有某些功能和默认值的 ViewModel,然后将其发送到表示层。一旦表示层完成使用虚拟机,它会将数据传递给 BLL,BLL 可以执行一些特殊的验证和一些额外的业务逻辑。之后,它将通过从 VM 中提取数据来创建模型并将其传递给 DAL,DAL 可以执行事务更新、删除或插入。

    通常我的解决方案至少有五个项目。我有 API 项目、MVC、业务层、数据访问层和资源。

    API

    这个项目包含模型、接口、抽象类等。本质上它包含了其他层需要实现的一切。通常有 IRepository 用于存储库模式实现,IUnitOfWork 用于工作单元模式,由实体框架或手动生成的模型(但没有映射)。 ViewModels 也在这里与用于转换模型和从模型转换的扩展方法一起。

    业务服务层

    该层负责从数据访问层获取数据,通过调用扩展方法将其转换为视图模型,初始化值。此外,如果 DAL 返回 null 值,则业务服务层不会将其作为 null 传递给表示层,而是会返回 Null 对象模式的实现。空对象模式实际上是在 API 中实现的,由业务服务层调用。该层引用 API 层。

    数据访问层

    您通常在这里实现存储库和工作单元模式。您无需直接与 EF 通信,而是将对 DbContext 的调用包装到这两个实现中。除此之外,从模型到 SQL Server 表和列以及外键的映射都在这里完成。该层引用 API 层。

    资源

    所有资源、字符串、语言翻译等都位于此处。本项目未引用 API,但业务服务层、数据访问层和表示层引用本项目来获取字符串的访问权限。

    表示层

    这通常是一个 MVC 解决方案(或者如果它是 Web 表单,那么它将使用 MVP 模式实现)。该解决方案与业务服务层通信。它从业务层接收 ViewModel 并返回值。如果视图模型对业务层有效,它会将它们传递给业务层,以使它们持久化。

    链接层

    这些层使用依赖注入相互连接。我通常使用 Unity 并使用外部配置设置来配置我的应用程序。这样表示层、业务服务层和数据访问层没有明确的引用。 MVC 没有对 BLL 的直接引用,BLL 没有对 DAL 的直接引用。控制器和 BLL 和 DAL 类的构造函数使用接口,并且统一传递适当的实现。

    【讨论】:

    • 您能否详细说明我如何进行此操作?是指逐个文件夹吗?我知道我即将到达我的目的地但不在正确的路径上,所以请指导我!!!谢谢提前!!!
    • 我希望这次更新可以帮助您弄清楚如何更好地组织您的项目。
    【解决方案2】:

    您可能会放置控制器使用的任何 Helper 方法、库代码或可重用的业务逻辑。我经常将实用程序类和验证逻辑以及与从 DBContext 实体获得的数据一起使用的任何功能放在此处。

    【讨论】:

    • 好的..谢谢,正如我所说,我已经创建了表示层,其中我保留了控制器和视图,但我希望用 BLL 编写一个函数,获取一个类,然后在控制器中调用该函数.可以吗?
    • 可以通过将 BLL 引用添加到 PL 来完成,但它告诉我这将是循环依赖,因此不允许......
    • 您的 DLL -> 引用了 DBConext 和数据 CRUD。 BLL ->(您编写逻辑类的地方)引用 DLL 和 DB MVC -> 引用 BLL 和 DLL 然后您可以从 MVC 中的控制器调用 BLL
    • 我应该做什么你能解释清楚一点吗?我应该在哪个文件夹中包含什么以及引用什么?拜托!!!
    • 在您的解决方案下添加一个项目 DLL 并将内容放在 SolutionFolder\DLL 中。进入这个文件夹但所有的 DbContext 和引用 System.Entity 等等。将另一个项目添加到您的解决方案调用 BLL 并将其放在 SolutionFolder\BLL 中。引用 DLL 项目。最后在 MVC 项目中引用 DLL 和 BLL 项目
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多