【问题标题】:Asp.net mvc layer divisionasp.net mvc层划分
【发布时间】:2013-12-09 10:12:48
【问题描述】:

我是 asp.net mvc 的新手。我想将表示层与逻辑层分开。我知道它已经在 asp.net mvc 中完成,但我想在另一台机器上拥有表示层。我不知道这是否我想做的,是可能的,但只是想问。我想要这样的东西:用户输入地址 123.123.123.123/Home 然后该请求被重定向到表示层。表示层然后向“逻辑服务器”询问数据(来自数据库或其他东西),逻辑服务器将其返回给表示层,该表示层将页面呈现给客户端。 我的总体目标是制作一个框架,让我们可以轻松地做到这一点。 还有我的问题: 1.值得做吗? 2. 可以用 asp.net mvc 吗? 3. 有这样的吗?

我还想扩展该框架以独立于技术工作。表示层将是一个“连接器”

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller separation-of-concerns


    【解决方案1】:

    您可以通过某种面向服务的架构来做到这一点。在您的 MVC 应用程序中,您有一个服务层,它可以与您的网络上的 WCF 服务或类似的东西通信。然后,您的 WCF 服务将与另一台机器通信以进行数据存储,执行所需的业务逻辑并返回简单的 DTO。

    1. 值得吗?这取决于你。这样做有充分的理由吗?这应该不难,如果你正确地编写了你的​​ MVC 应用程序,服务层将抽象出服务在另一台机器或同一台机器上的事实,这样你以后就可以灵活地改变主意。

    2. 有可能吗?是的

    3. 有这样的事情吗?我敢肯定有很多人正在做/已经做过我所描述的事情

    【讨论】:

    • SOA 是我正在寻找的架构。谢谢!
    • 我不同意。这是一个奇怪的 SOA 实现。我在回答中解释了原因。
    【解决方案2】:

    相当奇怪的建筑。

    您确实可以使用 SOA。它有很多优点,并且得到了很好的研究和支持。

    但是,我不会将 SOA 用于表示层(我不记得从未见过)。

    您通常将业务逻辑放在一个层中,并将其公开为 Web 服务(即 SOA),以及所有呈现(在本例中创建 MVC 视图模型,并将呈现的视图返回到浏览器)相同的应用程序。 (见底部注释)

    在 SOA 层中分离表示是没有意义的,因为您不能将它重用于其他任何事情。 IE。您不能将该表示层用于 Windows 应用程序,也不能将其用于 Java Web 应用程序。

    但是,如果您的业务逻辑在 SOA 层中公开,那么您可以将它与您想要的任何类型的 UI 一起使用:Windows 窗体、WPF 甚至 Java Web 应用程序。

    除此之外,路由和 MVC 中的控制器之间存在紧密的联系。你不能轻易实现你想做的事。但是,您可以轻松地创建 MVC 表示层(路由、控制器和视图),它使用从控制器公开为 SOA 的业务层。这更自然。

    有可能吗:当然可以,但不标准且很难做到。

    值得吗:不,不值得。你不能用不同的技术重复使用它。有什么优势?

    是这样的吗:从没见过!

    注意:拥有一个应用程序并不意味着拥有一个层。但是您不需要将它们分开在不同的应用程序或 SOA 层中。如果您正确使用 MVC,您将在视图(为浏览器呈现结果)和控制器(为呈现视图准备视图模型)和业务层(可以在不同的应用程序中,公开为 SOA 服务,并从此控制器中使用)。事实上,如果您考虑到需要视图模型(即为要呈现的视图而专门创建的对象,而不是直接使用业务实体),那么几乎不可能滥用 MVC。

    例如,一个 vie 模型可以有一个客户的数据来编辑它,但可能会有几个用于填充下拉列表的选项列表。如果你不使用视图模型,你很快就会遇到问题。

    【讨论】:

    • 我们很容易将这种方法用于我们的多设备应用程序,基本上是为了控制设备的混合。它非常复杂(因为您需要为每种类型的演示目标添加一个额外的“解析”层。查看 Unity 以获得更流行的示例。
    • 我认为您的解决方案是矫枉过正。通常你可以使用路由来处理多个设备,如果绝对必要的话,还可以使用特定的视图引擎。在大多数情况下,这根本没有必要。无论如何,您真的使用不同的应用程序来处理不同设备的相似视图吗?在单个应用程序中完成它不是更容易吗?如果您使用多个应用程序,则表示层中的每次更改都需要更改多个应用程序。额外负担!您正在使用它并不意味着它是最好的解决方案。您确定您的真的需要这种复杂的解决方案并为您带来附加值吗?
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多