Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 设计一套web应用程序_.net_Azure_Architecture_Software Design - Fatal编程技术网

.net 设计一套web应用程序

.net 设计一套web应用程序,.net,azure,architecture,software-design,.net,Azure,Architecture,Software Design,我们正在重写以前用Delphi编写的企业遗留应用程序套件。该套件包括一些超级用户使用的胖客户端、一个单一租户关系数据库、一个供所有员工使用的windows service web应用程序以及一系列按需或按计划运行的.EXE工具。该套件始终安装在本地(客户站点),并且主要限于其局域网 现在是2018年,我们必须将套件重写为web界面应用程序。但不仅如此,我们还必须对其进行设计,使其易于现场安装、由我们托管或以多租户的方式作为SaaS提供。我们也有一些自己的硬件现场安装 我们已经开始将web应用程序

我们正在重写以前用Delphi编写的企业遗留应用程序套件。该套件包括一些超级用户使用的胖客户端、一个单一租户关系数据库、一个供所有员工使用的windows service web应用程序以及一系列按需或按计划运行的.EXE工具。该套件始终安装在本地(客户站点),并且主要限于其局域网

现在是2018年,我们必须将套件重写为web界面应用程序。但不仅如此,我们还必须对其进行设计,使其易于现场安装、由我们托管或以多租户的方式作为SaaS提供。我们也有一些自己的硬件现场安装

我们已经开始将web应用程序解耦到引擎、web api(.NET web api 2)和前端SPA(Angular 2)中。我们将使用MQTT和Azure Iot Hub与内部硬件进行通信

我们正在努力避免为新的web应用程序创建一个单一的代码库,该代码库现在将取代多个遗留组件,同时又不希望以我们以前拥有的东西结束:一个应用程序和工具的混合体,具有不同的用途、兼容性、编写的技术等

具体而言,我们有几个设计疑问:

  • 我们是否将应用程序分成几个相当独立的web应用程序(模块),并基于我们自己的SSO服务器来提供授权和身份验证?我们确实希望为用户提供无缝体验,特别是能够访问几乎所有模块的超级用户。因此,单一的“门户”是必不可少的

  • 我们是选择多租户数据库还是使用Azure弹性数据库池,在SaaS环境中每个租户有一个数据库

  • 发行版:该套件的安装相当复杂,并且基于.NET framework(而非.NET core),MS licensing根本无法提供提供设备的好方法。安装人员都是这样。Docker并不是一个真正的内部安装选项


  • 永远不要从头重写大型应用程序。这样做几乎总是不可避免的。有几种工具允许您在类似Delphi的基础上编写restful服务

    我会选择最常见的模块,在这些服务之上编写web前端,降低安装成本。一旦前端数量达到临界值,就要重写后端以降低安装成本(并引入多租户)

    循序渐进地这样做不仅可以让您获得现有应用程序基础架构的优势,还可以缓解主要重写所带来的最大问题,即“启动前需要多少?”?这个问题通常会使软件组织瘫痪,因为管理层通常会断言,新应用程序必须完成旧应用程序所做的一切,再加上一些附加功能。问题是,旧的应用程序是用10年时间编写的,出于某种原因,他们不愿意等待10年时间来构建新的应用程序


    如果您打算进行一次大爆炸式的重写,请确保在开始编写代码之前花大量时间建立范围。

    对于#1,请查看微服务体系结构#2.如果您需要支持它,您应该从一开始就设计多租户,包括在您的应用层/服务合同中。感谢@AlwaysLearning,我的雷达上有微服务。谢谢Rob。我们知道斯波尔斯基的博客文章中提出的问题。尽管如此,问题仍然在于如何编写新的web前端以避免庞大的代码库,同时允许无缝的用户体验。