【问题标题】:Web forms to Razor view migration of enterprise applicationWeb 表单到 Razor 视图的企业应用程序迁移
【发布时间】:2017-12-13 18:56:11
【问题描述】:

我是一个使用快速老化架构的大型企业 Web 应用程序的开发人员,因此我们一直在讨论如何最好地实现应用程序的现代化。具体来说,它是一个 ASP.Net 4.0 Web 表单应用程序,顶部带有 MVC 类型,但它仍然使用所有 ascx 视图。此外,我们正在使用一个名为实体空间的数据库框架,它基本上已经被实体框架所取代。我们正准备将应用程序迁移到 .net 4.6,因此我们至少正在运行一个现代版本,但我们希望有朝一日能够对应用程序进行广泛的单元测试和测试自动化,这目前是不可能的,因为架构。

那么我的问题是,有没有人有关于如何最好地解决这个问题的任何好的信息或资源?例如,假设我们有一个 ASP.Net 4.6 Web 应用程序,它下面有 10 个区域。是否可以将一个区域拉出到它自己的项目中并对其进行重构以使用 Razor 视图和实体框架,但仍与尚未大修的其他区域一起在同一域中运行?一口气拿下和重构整个应用程序永远不会卖给高层管理人员,但如果我们能一次完成一个模块(区域),那可能是可行的。任何有关我们可能面临的技术可能性或问题的信息都会非常有帮助。我无法想象其他大型企业应用程序没有遇到过类似的问题,但我发现关于如何解决这个问题的信息非常少。

【问题讨论】:

    标签: c# asp.net asp.net-mvc web-applications


    【解决方案1】:

    如果您有一个包含所有业务操作的 DLL,则可以解决您迁移到 MVC 的问题;那么您只需从支持 Razor 的 MVC 应用程序而不是 Web 窗体应用程序中使用它们。

    如果您在整个系统中使用了 DIP(依赖倒置原则),则可以解决您迁移到 EF 的问题;您只需将存储库/服务/dao 的具体实现更改为 EF 适配器而不是实体空间类。

    编辑: 但是,既然你问我们如何从现在的位置继续前进;

    • 我想说不要犯你以前犯过的错误。分开你的关注点,应用代码和业务代码是不同的东西,应该属于不同的位置。
    • 编写单元测试,您有代码库可以轻松提出要编写的测试。
    • 关注S.O.L.I.D. principles

    在迁移的微观层面上,我使用中型应用程序做到了这一点。我们使用了经典的 DAO 方法,然后我们想迁移到 NHibernate。我们的 DAO 方法使用存储过程,因此我必须使用 NH 的 Linq To SQL 方法编写所有 SP。我们已经在相当短的时间内处理了迁移,但我不确定我是否已经破坏了整个事情。非常幸运的是,我没有破坏整个事情,而且它确实在第一次尝试中起作用。但这纯粹是运气,如果我们有单元测试和集成测试,那么第一次就正确就不是运气了,因为我们会在运行之前遇到错误。

    这是我的迁移过程;首先我设计了通用接口,因为我已经在我面前编写了代码。我只是从 DAO 中提取签名并将它们放在单独的接口中。然后我会将 DAO 的依赖项(主要是业务操作/服务)更改为依赖于接口。然后我会编写 NHibernate 具体类,并将它们作为具体实例提供给依赖系统。

    因此,如您所见,第一步是重新设计“接口”,这是从架构角度重构系统的好机会。第二步是改变依赖关系。如果您在第一步中做错了什么,这是一个断言的好机会。第三步是实施新系统。

    【讨论】:

    • 感谢您的意见,所有合理的建议。不幸的是,我不在这个应用程序的原始设计中,所以架构问题是继承的。我的主要问题在于是否可以一次重构应用程序的一个区域。基本上你可以在过渡过程中让 Web 表单 ascx 视图和 ravor 视图和谐共存吗?如果是这样,我将如何处理?在此过程中我们必须处理哪些技术后果?
    • 所以您正在考虑在同一个物理位置运行两个应用程序?我认为不可能把它变成一个单一的项目。相反,您会根据哪些部分在哪里不断更新这两个应用程序。您可以在此过程中进行一些自动化,也许某些配置优先于 MVC 应用程序进行路由管理,这样即使页面在旧应用程序中运行,用户也无法访问它。顺便说一句,不要冒犯我回答中的“你”部分;我说的是原作者和负责决策的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-04-12
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多