【发布时间】: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