【问题标题】:ASP.NET MVC and Web API sharing Class Library ProjectASP.NET MVC 和 Web API 共享类库项目
【发布时间】:2016-06-04 15:41:40
【问题描述】:

我将在 .NET 中构建以下应用程序,我对正确的架构有几个问题:

  1. 控制台应用程序:读取本地文件并将数据更新到 Azure 中的 SQL 数据库
  2. ASP.NET MVC:与上传到 SQL 数据库的数据进行交互的仪表板站点
  3. Web API:处理业务逻辑和数据访问。

我首先想到的是使用 Web API 作为核心来提供数据和业务逻辑。但是,整个项目都需要一个类库,以便所有项目在业务对象方面“说同一种语言”。示例:我在控制台应用程序中有一个 SMS 对象,它将向 Web API 提交数据。此 Web API 也应具有相同的 SMS 对象。接下来,ASP.NET 将显示 SMS 数据,因此也应该访问相同的对象。但由于这是一个 MVC 应用程序,它会有自己的数据对象。

解决这个问题的正确方法是什么? Visual Studio 中的解决方案树应该如何?

感谢您的帮助。

【问题讨论】:

    标签: asp.net .net asp.net-mvc asp.net-web-api


    【解决方案1】:

    不要使用 MVC,做一个 WebApi 服务,选择一个 Web UI 框架,比如 react 或者 angular。 MVC 已经不值得使用了。

    这样,每个人都可以连接到 WebAPI、您的控制台应用程序、您的网站/仪表板,甚至是未来的移动应用程序。

    如果您曾经将数据库从 SQL 服务器更改为 txt 文件 (xD),那么您的控制台应用程序也必须更改。仅使用一个 API 与您的数据库进行交互将有效地分离您的所有层。

    但是,项目中需要一个类库,以便 全部

    是的,但是您可以通过共享库甚至共享项目来实现这一点。就是一堆类...

    您的所有逻辑都应该在 Web API 中。包括控制台应用程序部分。它应该只读取数据,然后连接到 API。

    因此,在这种情况下,您不需要在所有项目中使用相同的模型,因为 Web API 业务模型的模型可能比与之交互的模型更复杂。

    此外,将仪表板文件提供给客户端(浏览器)将非常容易,因为只需要调度 HTML、js 和 CSS 文件。任何服务器都可以,而且它不会绑定到 .Net 或您喜欢的任何服务器端代码。

    【讨论】:

    • 现在对我来说一切都很有意义。拥有像 Angular 这样的 Web UI 而不是 MVC 可能是当今最现代的解决方案。尽管如此,对于后端部分,您是否有一个跨控制台应用程序、仪表板和 Web API 的共享类库项目,以便它像“合同”一样运作?
    • 没有。我不会。通常 webapi 可能有复杂的东西,不一定在 API 本身,即合同。仪表板和控制台应用程序可能会用不同的语言制作:例如 C# 中的控制台应用程序和 javascript 中的仪表板。我知道 COnsole 应用程序和 WebApi 将具有相同的基本共享模型,您可能会共享它,但只有合约一层,而不是业务层一层。这不再有意义了。
    • 对不起,我在输入时按了 Enter,并在完成前发送评论。
    • 我想你已经意识到我是一个试图赶上当今技术的老派开发人员 =) 也许这个问题值得一个新的话题,但是构建 Web API 的最佳实践是什么?建筑学?我看到你提到了业务层,所以我认为有标准可以做到。
    • 我知道你的感受,我刚从 WebForms 跳到 Angular2 xD。我从不喜欢 Web 应用程序中的 MVC。是的,当然,我非常喜欢 Rest APIs:rest.elkstein.org 现在,我个人将所有逻辑移动到数据库(如果是关系)或服务/任务(如果是 nosql),所以我有一个非常薄的 API,它只处理请求,验证,并回复给客户端。然后在客户端,所有 UI 的东西都是用 js 完成的。在 WebAPI 和 APP 上,它们之间只有数据流动。如果它是一个网站,则 html 和文件是从不同的网站/区域/服务器提供的,以保持图层分开。
    【解决方案2】:

    这并不意味着因为它是一个MVC应用程序它需要有自己的数据对象。我过去所做的是创建一个类库并将对MVC相关DLL的引用添加到这个项目中。然后我会用所有必需的 MVC 属性来装饰对象,最后我会在我的应用程序中需要它们的所有项目中添加对此类库的引用,例如业务层、Web api 层和 MVC(UI) 层。

    在您的场景中,它可能是这样的:

    【讨论】:

    • 这是我一开始的想法,只是不确定类库是否是支持这种情况的正确项目类型。谢谢!
    • 只是想评论这个答案。虽然它是有效的,但它不是最好的解决方案。例如,如果您的 MVC 和其他应用程序不使用 API,您为什么需要 API?
    • MVC会消费API。上图只是为了说明通用对象库与解决方案中其余项目的关系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2019-03-29
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多