【发布时间】:2011-10-25 20:05:15
【问题描述】:
所以,我需要一些输入来重构一个 asp.net (c#) 应用程序,该应用程序基本上是一个用于创建动态表单(任何表单)的框架。从高层次的角度来看,有一个包含表单的表,然后有一个包含所有表单字段的表,两者之间是一对多的。有一个校验表,每个字段可以有多种校验,表单字段表到校验表是一对多的。
所以问题在于,该应用程序已作为万能的可定制解决方案出售给所有客户。所以,这个想法是他们想要的任何形式,我们可以使用数据库配置来构建它。问题是,这并不总是可能的,因为字段之间存在复杂的关系,表单本身之间也存在复杂的关系。此外,只有一个代码库,这是针对多个客户端的 - 所有客户端都自己托管它。每个客户端都有非常具体的逻辑,它们都在同一个代码库中,没有真正的分离。有时很难使其通用化,因此在某些情况下它具有硬编码逻辑(例如 if formID = XXX then do _)。您还可以有嵌套的表单,例如在每个表单中单独设置一组字段。
因此,通常,当一个客户请求更改时,我们进行更改并将其部署到该客户端 - 但随后另一个客户端请求不同的更改,我们进行更改并将其部署到该客户端,但是从早期的客户端破坏了它,尝试调试它很头疼,因为一切都是动态的。我们无法回滚之前的更改,因为那样另一个客户端就会被搞砸。
它不是在真正的 3 层架构中完成的——它是一个引用 DB 类和类库的网站。网站本身、类库中、数据库存储过程中都有业务逻辑(验证在存储过程中完成)。
我负责重新组织整个事情,以下是我的想法/问题:
我认为总的来说这是一个糟糕的模型,因为我听到一位开发人员说的其中一件事是,任何时候任何客户进行更改,我们都应该部署到每个人 - 但这是不现实的,如果我们说有 20 个客户 - 需要对一切进行回归测试,因为我们不知道影响...
总共大约有100种形式,它们之间有一些相似之处(不多)。但我认为动态引擎可以解决所有表单请求的想法也不现实。客户提出最奇怪的要求。例如,他们让这个引擎执行常规数据输入表单和搜索表单。
页面之间有很多保留状态,这一切都是使用会话变量完成的,这没关系,除了它没有真正被跟踪,因此来自同一用户的会话不断被覆盖,我认为应该取消会话。
我真的应该重写整个内容吗?这个应用程序大约有 3 年的历史,已经完成了很多测试和事情,并且实现了严肃的业务逻辑,所以我不想摆脱所有这些(乔尔的建议)。但它确实是一团乱七八糟的 sphagetti 代码,所有事情都需要很长时间才能完成,而且由于微小的变化,事情总是会中断。
我一直在阅读 Martin Fowlers “重构”和 Michael Feathers “有效地处理遗留代码” - 它们很好,但我觉得它们是为一个架构“稍微”更好的应用程序编写的,它仍然存在一个 3 层架构,逻辑上“有些”相似。
有什么想法/意见吗?
哦,还有“救命!”
【问题讨论】:
标签: asp.net vb.net web-applications dynamic webforms