我可以说 MVP = 3 Tier Archi 吗?

2023-11-30

从最近几天开始,我一直在为我的新 Web 应用程序寻找最佳架构,该应用程序将使用 C# 在 ASP.Net 中开发。到目前为止,我只发现并研究了以下3个

  • 三层架构(注:作者: 层我的意思是逻辑层)
  • 模型视图控制器 (MVC)
  • 模型视图演示者 (MVP)

现在我的问题如下:

1) 据我了解 3 层架构和 MVP 我可以说 MVP 和 3 层是 一样的东西?如果不是,那么两者之间有什么区别? (注:我只找到 MVC 和 MVP 或 MVC 和 3 Tier Archi 之间的区别,但没有人解决差异 MVP 和 3 Tier Archi 之间)

2)我只发现以上三种架构选项,还有其他选项吗 也可用吗? (注:这里我只想要网络整体架构的选项 应用程序,如上面3)


从软件架构的角度来看;我们使用术语是因为术语具有某种含义。当您使用“3 层”之类的术语时,您应该在符合其预期和理解含义的地方使用它。仅仅凭借具有某种类型的三个离散组件,各种事物都可以被视为“三层”。但是,如果您使用这个术语来描述 MVP,您就会误导他人。为什么不直接说“MVP”呢?

3 层通常指三个物理层。维基百科上有一篇很棒的文章.

并附有相关图:

Wikipedia's three tier diagram

MVP 和 MVC 都不排除使用这三个物理层。事实上,简单地将您的应用程序创建为“MVC”应用程序(或“MVP”)并不能真正澄清太多问题。例如,它可以是服务器端的 MVC(如 ASP.NET MVC),也可以是带有 Javascript 的客户端 MVC,或者两者兼而有之!

至于你关于架构选择的问题;竞争环境非常开放。您所做的选择通常取决于您在收集应用程序要求时应收集的许多因素。

很多时候,您必须在可扩展性和复杂性之间进行权衡。然而,许多新技术使得这种权衡可以忽略不计 - 我建议任何开始新项目的人都认真考虑它们(下面讨论一些)。

在物理上,几乎总是最好有一个专用的数据层(SQL、Mongo、Azure、Amazon,您可以选择)和一个​​专用的、可扩展的逻辑层(目前通常在 .NET 领域作为 WCF 服务实现)。

大多数时候,人们会加入他们的网站和逻辑层......但情况不一定如此。有时,拥有专门用于只能由您的网站层访问的 Web 服务的物理层是有意义的。再次强调,这一切都取决于具体情况。

就逻辑层而言(在逻辑层内),几乎总是最好有某种数据访问层(DAL)、代码内模型(无论是手动实现还是通过 LINQ-to-Entities 之类的东西实现),以及专用的业务逻辑层。

如今,越来越多的人似乎回归到经典的 HTML 和 Javascript(借助 JQuery、Prototype、DOJO 等)并使用 REST/JSON 与 Web 服务聊天,以在客户端检索和显示数据边。在这种情况下,您可以在客户端拥有一个成熟的应用程序,在后端拥有另一个成熟的应用程序......每个应用程序都有自己上面描述的逻辑层的实现。

选项是敞开的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以说 MVP = 3 Tier Archi 吗? 的相关文章

随机推荐

  • 如何使用 Fiddler 将 XML POST 到 ASP.NET WebAPI

    给定以下 ASP NET WebAPI 我尝试使用 Fiddler 发送测试 POST 但无法让它工作 无论我发送什么 我总是只看到没有数据发送到服务信息 Imports System Web Http Imports System Net
  • SQLITE 将大量行转置为列

    我有一个这样订购的数据库 ID Subject Value 1 Subj1 Val1 1 Subj2 Val2 2 Subj1 Val3 2 Subj5 Val4 等等 ID 数以千计 受试者数以万计 我想找到这个矩阵的转置 我怎么做 如果
  • 从 mcrypt_decrypt 到 openssl_decrypt

    我有一个问题 我想用 open ssl 解密替换对 mcrypt 的函数调用 但输出是混合的 这是 mcrypt 实现 效果很好 decrypted trim mcrypt decrypt MCRYPT RIJNDAEL 128 subst
  • 在 JPA 上映射 Oracle XMLType (EclipseLink)

    我们的项目有一些特殊要求 其中之一是从 Oracle 10g 数据库的 XMLType 数据库列获取数据 我们找到了一个使用 JDBC 的简单解决方案 但它会使应用程序有点混乱 因为所有数据访问都是通过 JPA 完成的 使用的实现是 Ecl
  • 使用 HTML5 创建音频可视化工具

    我正在尝试使用我在网上找到的示例对在线广播流使用音频可视化这一页 然而 与发现的问题类似这个帖子 我的音频文件 即使使用本地文件进行测试 就是没有声音 当然可视化也没有任何作用 我的 HTML 如下
  • 在 Firefox 和 Chrome 中呈现 HTML

    div style height 20 width 70 div div gt div style height 20 width 30 div 在 Chrome 中 这两个部分位于同一行 但是两个div之间有一个小差距 但在 Firefo
  • 根据多个数据块的列值改变点颜色 gnuplot

    我的问题非常类似于this其一 从中我学到了很多东西 但是 我正在使用多个数据块 如下所示 1 2 3 4 5 6 7 8 0 4 3 0 4 5 7 2 3 0 4 5 0 5 6 7 我将它们绘制如下 plot file txt ind
  • 为什么 Python 创建的 MD5 哈希与在 shell 中使用 echo 和 md5sum 创建的 MD5 哈希不同?

    Python MD5 哈希值与 shell 上的 md5sum 命令创建的哈希值不同 为什么 gt gt gt import hashlib gt gt gt h hashlib md5 gt gt gt h update mystring
  • SSIS版本检查

    这是我在这个论坛上的第一篇文章 我一直坚持使用 Microsoft SSIS 软件包 但我真的不知道如何打败它 我已经提到了 SSIS 包文件 我尝试在 SQL Server 2005 上使用 Business Intelligence D
  • 在 contenteditable div 中设置插入符位置

    Intro 当编辑 contenteditable DOM 对象的内容时 不同的浏览器有不同的行为 例如 Firefox 18 0 创建一个新段落 p 或换行符 br 在某些情况下 Chrome 24 会创建一个 p div 为了解决这个问
  • 如何修复 iOS 12 Safari Cors 预检错误?

    我试图更好地理解 COR 因为我们的 Web 应用程序的一些用户抱怨说 自从他们升级到 iOS 12 后 他们收到了预检错误 来自网络检查器的错误 Error Preflight response is not successful Err
  • 导出可运行的 JAR 文件不支持 UTF-8 编码 - Java Eclipse

    我使用 eclipse IDE 制作了这个小型 Java 程序 我已将工作区设置为支持 UTF 8 并且程序在从 eclipse 执行时运行良好 该程序的一部分是将一些数据写入文件 需要 UTF 8 因为它是阿拉伯语 我需要导出一个可运行的
  • java.io.IOException:找不到 Main [动态功能模块] 的 PROCESSED_RES 输出

    将动态模块添加到已有 6 种风格的多模块项目中 出现这个错误 ERROR Unable to resolve dependency for dynMod debug compileClasspath Could not resolve pr
  • 如何检查指针是否指向数组或单个 int 或 char

    我想知道一个指针是否指向一个array或单身integer 我有一个需要两个指针的函数 int and char 作为输入并判断指针是否指向array或单身integer pointer pointer 4 pointer1 pointer
  • 如何导入 XML 表 Google Sheets

    所以我有一个谷歌表 我想通过 ergast com API 导入 F1 排位赛和比赛结果 我只需要表中的驱动程序和位置信息 但如果更容易的话 我很乐意导入整个表 我尝试过 IMPORTHTML IMPORTFEED IMPORTXML 但无
  • 使用网络抓取提供数据框

    我正在尝试将一些刮取的值附加到数据框中 我有这个代码 import time import requests import pandas import pandas as pd from bs4 import BeautifulSoup f
  • 使用 dotnetzip 压缩文件,打开时文件已损坏

    我从字节数组在控制器中创建了一个 zip 文件 并将该 zip 文件作为文件结果返回 当我下载 zip 文件并解压该文件时 它已损坏 我这样做 byte fileBytes array MemoryStream fileStream new
  • 如何将网页转换为图像?

    我想将 aspx HTML 页面 用户界面 转换为图像 例如 JPEG 我正在使用下面的代码 Protected Sub btnGet Click ByVal sender As Object ByVal e As System Event
  • Raspberry Pi 3 上的 Google Assistant SDK:音频设置不起作用

    我一直在尝试将 G Assistant 安装到 Raspberry Pi3 上 我在以下链接中有疑问 https developers google com assistant sdk prototype getting started p
  • 我可以说 MVP = 3 Tier Archi 吗?

    从最近几天开始 我一直在为我的新 Web 应用程序寻找最佳架构 该应用程序将使用 C 在 ASP Net 中开发 到目前为止 我只发现并研究了以下3个 三层架构 注 作者 层我的意思是逻辑层 模型视图控制器 MVC 模型视图演示者 MVP