我很快将带领一个团队在 ASP.NET(Web 表单)中创建一个复杂的制造 Web 应用程序,而以前我们的业务逻辑将在同一个项目中,或者更糟糕的是,在页面后面的代码中。
我知道关注点分离很重要,并且使测试变得更加容易(测试一直是我们的问题),所以这就是我们想要进入的方向。
然而,我对如何实现这一点有点困惑——我们使用了很多绑定到 SqlDataSources 的 RadGrid 等。像这样的事情如何与另一个项目中的所有业务逻辑一起工作?
另一种选择是保留您的网络表单,但使用 MVP 模式。我们发现它对于新手或初级开发人员的进入门槛要低得多,因为它只是简单的 c#(无需学习 Razor 或 MVC 的约定),我们发现 90% 的开发可以由知道的开发人员完成绝对没有关于 Web 开发的内容(我们基本上抽象了任何与 Web 相关的内容,例如用户或配置文件,以使业务代码更可重用)。
您将不得不取消SqlDataSource
s,但我同意其他所有人的观点,即这些也是邪恶的。在我们的实现中,数据将从数据库中检索并包装在 POCO DTO 中,作为 IEnumerable 传递给视图,然后在页面的代码隐藏中进行数据绑定。
MVP 在企业界的另一个好处是它对变化的弹性。由于视图尽可能愚蠢,因此切换它非常简单。您可以使用相同的模型和演示者,并同时在 Winforms、Silverlight、Webforms 和控制台应用程序中拥有视图。视图的实现与 Presenter 或 Model 无关。
MVC 是新的热点,但同时使用 MVC 和 MVP,对于可维护性和可靠性是关键的大型企业 Web 应用程序,我建议使用 MVP。
我的建议是:
您可以使用 ObjectDataSource 而不是 SqlDataSource 来利用其他项目(即另一层)中的类,但您仍将使用 Web 窗体进行一场艰苦的战斗。
如果关注点分离和可测试性是重要的关注点,我强烈建议使用 ASP.NET MVC。