【问题标题】:How to decide whether to split up a VB.Net application and, if so, how to split it up?如何决定是否拆分 VB.Net 应用程序,如果是,如何拆分?
【发布时间】:2010-12-14 19:29:54
【问题描述】:

我有 2 1/2 年的 VB.Net 经验,大部分是自学的,所以如果我看起来仍然很笨拙并且不知道一些基础知识,请多多包涵。我建议你在开始之前先喝杯茶,因为它似乎已经很长了......

我目前有一个相当大的应用程序(VB.Net 网站),最后一次计数超过 15000 行代码。它不做零售或任何特别复杂的事情——它实际上只是一个带有管理前端、目录/目录管理系统和综合浏览系统的批发查看网站。

我不太了解 .Net 应用程序如何在后台工作——它们是否都加载在同一个线程上,或者是否每个都有自己的线程......我只知道如何编写它们,或者至少知道喜欢认为我这样做... :-)

基本上我的应用设置如下:

  • 有两个不同的区域 - 客户区域和管理前端。
  • 客户前端的主要部分是目录。 MasterPage 将加载产品列表,仅此而已,这对于所有客户前端页面都是通用的。
  • 在上传更改之前,我倾向于一次只处理应用程序的一个或几个部分。因此,例如,我可能会更改目录的层次结构并更改目录页面以匹配层次结构的变化,同时不理会其他所有内容。
  • 页面浏览数据库变得非常大,因此在首次请求应用程序时由于其工作方式而变得相当缓慢。
  • 应用程序超时设置为 5 分钟 - 不知道如何更改它,我什至尝试在这里问这个问题,似乎记得解决方案非常复杂,建议我不要更改它,但如果客户在最后一次页面查看后 5 分钟请求应用程序,然后它将从头开始重新加载应用程序。这意味着只要页面不活动超过 5 分钟,页面加载就会非常缓慢。

我不确定这是否需要考虑以确定如何最好地拆分应用程序(如果有的话),但目录系统的每个部分设置如下:

  • 顶层的 Manager 类,管理前端用于添加、编辑和删除指定类型的项目,客户前端用于检索指定类型的项目列表。例如,“RangeManager”将包含产品“Ranges”的列表,并将用于与客户前端的这些产品进行交互。
  • 一个项目类,例如 Range,它包含一个属性列表。例如 Name、Description、Visible、Created、CreatedBy 等。添加/编辑的表单通过这些循环显示管理员的相关控件。例如 BooleanAttribute 的复选框。
  • 属性类,可以是StringAttribute、BooleanAttribute、IntegerAttribute等类型。还有自定义属性(不仅仅是数据类型),例如 RangeAttribute、UserAttribute 等。这些被赋予了一个数据字段,该字段用于在第一次请求时获取特定于它所包含的项目的数据。基本上,Item 会被赋予一个 DataRow,仅在第一次请求时才由 Attributes 存储和访问。
  • 当向特定经理请求一个项目时,经理将遍历数据库中的所有项目并创建项目类的新实例。例如,当从 RangeManager 请求 Range 时,RangeManager 将遍历 Ranges 表中的所有 DataRows 并为每个 DataRows 创建一个新的 Range 实例。如上所述,它只是使用 DataRow 创建一个新实例,而不是在其中将所有数据加载到其中。属性本身在第一次被请求时从 DataRow 中获取相关数据。

在我看来,每次修复代码中的小错误或拼写错误时重新编译并上传整个应用程序似乎有点愚蠢(例如,如果我将文本设置为动态标签)。对目录页面的修复/更改(现在的方式)可能意味着客户试图查看联系人页面,除了拥有相同的 MasterPage 之外,该页面与目录页面没有任何关系,因为 DLL 无法这样做正在上传。

基本上我的问题是,鉴于我目前的情况,人们会如何建议我通过将应用程序拆分为多个应用程序来更改应用程序的架构?我的意思是它只是客户/管理员,还是客户/管理员和综合浏览量,还是其他方式?或者根本没有?还有其他我没有在这里提到的替代方案吗? Web 服务可以在这里派上用场吗?就像将目录本身拆分到一个不同的应用程序中,让所有其他页面的母版页使用 Web 服务来获取要在左侧列出的产品名称?我只是让事情变得过于复杂吗?从这个问题的长度来看,我可能是,而且这不是第一次......我试图保持简短,但我总是失败...... :-)

提前非常感谢,如果我完全让您感到困惑,对不起!

问候,

理查德

【问题讨论】:

  • 我想有人可能会让你为这个问题的长度感到悲伤:)
  • 这是 ASP.NET 吗?你多次提到有一个网站和母版页,但我只看到明确提到过 VB.NET。
  • @El Ronnoco:这就是为什么我已经多次道歉并建议在阅读之前先喝杯茶! :) @Cody:然后我将删除 .net 标签。给我一点时间...

标签: vb.net web-applications architecture


【解决方案1】:
  1. 15000 LOC 并没有那么大。

  2. 听起来您没有预先编译您的网站以进行发布。您可能想阅读以下内容:http://msdn.microsoft.com/en-us/library/1y1404zt(v=vs.80).aspx

  3. 重新编译和上传应用程序是最好的方法。如果您要更改的只是标记,则可以单独上传(例如更改 aspx 页面中的某些 html 布局)。

  4. 我不知道您在这里所说的应用程序超时是什么意思,但是如果您的应用程序域每 5 分钟回收一次,那么这似乎根本不对。你应该调查一下。

此外,如果您发现自己在网站的各个不同部分工作(即许多不同的更改),但只需要单独部署一些项目,那么您应该了解您是如何使用源代码控制工具的(您是使用一个,不是吗?)。研究诸如 GIT 和分支/合并之类的东西。

【讨论】:

  • 关于第 2 点:是的,我正在通过 Publish 编译它。第 4 点:是的,我的意思是应用程序域在大约 5 分钟后回收。会话设置为一个小时,但用户仍然会在 5 点后退出(幸运的是,唯一的用户是管理员)。我将在适当的时候进一步调查。恐怕我没有使用源代码控制 - 从我实习的那年开始,我的印象是,如果你有一个团队在做这件事,我就觉得这是为了。我是唯一的开发者,所以根据我被告知的内容,我认为我不需要它。
  • 第 3 点:这样做似乎很“不确定”。我的意思是不必要的停机时间等等。我总是确保我在午夜或更晚上传,以避免不必要的停机时间,但该公司现在已在世界范围内广为人知,因此这种方法并不总是有效。
  • @ClarkeyBoy - 使用源代码控制。即使它只是你 - 如果你真的搞砸了,你也可以回滚。至于停机时间,如果它变得那么忙,您可能需要查看某种网络农场,这样您就可以一次关闭单个服务器而不会干扰太多用户。
  • @ClarkeyBoy - 如果 3 看起来有问题,那么仅上传一个带有更改的 aspx.vb 文件是否更容易(因为您可以设置您的网站来执行此操作)?如果它依赖于您忘记的另一个更改怎么办?突然你的网站出现编译错误...
  • 与其说是忙碌,不如说是变得不可预测。我的意思是确定它在白天相当繁忙,但有时我们可能会有人在晚上查看该网站上的 20 - 30 页。如果一个人因为网站关闭而失去兴趣,那么可能会损失数千英镑。请注意,如果他们有兴趣,他们会回来的,不是吗?
【解决方案2】:

从阅读开始:

Application Architecture Guide

【讨论】:

  • 谢谢。我会确保我通读这个!老实说,即使我只有这个链接作为回复,问这个问题也会很有用。
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 2021-10-19
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多