2010-12-06 95 views
1

我的公司正在研究ASP.NET和Prism。我们想知道在这两个选项之间可以重复使用多少代码。棱镜与ASP.NET

依我之见棱有这些 “零件”:

  • 壳牌(引导程序和这样)
  • 模块
  • 服务(而不是web服务)
  • 地区
  • 松耦合事件(IEventAggregator)
  • 统一(虽然真的这是一个独立的产品)

正如我所看到的,绝对必须与Silverlight/WPF一起使用的部分是Regions。

该shell可能有点棘手,但我认为它可以在ASP.NET应用程序中完成。我也认为模块(非地区提供模块)也应该可行。使用IEventAggregator和Unity应该很容易。

我唯一的问题是,我没有真正的ASP.NET编程经验,所以我不确定我的假设。在讨论这个问题之前,我会喜欢一些熟悉Prism和ASP.NET的人的反馈(在我的公司)。

基本上,我想让Prism模块运行Web服务和业务逻辑。然后,我想要将这些模块(重新)用于ASP.NET应用程序和WPF/Silverlight Prism模块(通过区域)。

我是否试图合并这两个系统来规划一个艰难的旅程?

回答

6

您将遇到的问题是客户端应用程序和Web应用程序之间的不同生命周期样式。

Web应用程序基本上是无状态的 - 对象图形建立起来,请求得到满足,然后一切都被扔掉。假设许多不同的用户在同一时间点击它,必须编写Web应用程序。

另一方面,客户端应用程序启动,设置其环境,然后将所有内容都保存在内存中。另外,客户端应用程序实例将有一个用户,而不是很多。特别是shell和EventAggregator依赖于内存中的所有东西,甚至跨越请求,并且不区分谁在工作(因为在那个世界中,只有一个)。

我认为你可以通过在正确的地方连接一个DI容器并编写一些引导代码来在运行时拉入代码,从而获得大部分的好处。

+0

+1在其他框架中使用PRISM的DI方面很常见。 – 2011-09-19 16:54:14

1

我提高了Chris的答案,因为它与vanilla asp.net是100%正确的。但是,通过一点创意,您可以利用Knockoutjs更接近您的目标。

1

我想你正在走向一个受到伤害的世界。我已经深入了解了Prism代码,它并不漂亮,它与WPF/Silverlight紧密相关。模型是非常不同的,共享代码的想法听起来很棒,但我敢打赌几乎不可能。

2

如果代码重用是一个大问题(它应该是),那么我会考虑您的项目生命周期需求。你需要这些代码才能生存几年,五年,十年吗?更多?很显然,大多数大型项目都希望尽可能少地维护(或重写)代码,以使其代码尽可能长寿。

我提出这个问题的原因是,如果您使用Prism或ASP.NET编写代码模块,那么您将(可能)可重用的代码绑定到特定的技术中,该技术可能会或可能不会用于5年以上。这是将您的长期代码与相对短期的技术结合起来。在“下一件大事”发布的几年中会发生什么,并且您希望将您的项目迁移到它?如果您与Prism或当前的ASP.NET结合使用,您可能会发现在财务上很难/不可能切换技术。

您最好将您的应用程序逻辑抽象化并流入可与Prism和/或ASP.NET接口的顶级技术无关结构。这种解耦思想是IoC/DI容器(如Unity)最近变得如此流行的主要原因之一。它也使得单元测试变得更容易。

实质上,使用某些应用程序基础结构(如N-tier)可以封装您的业务逻辑和数据访问,同时抽象您的用户界面以使其可以重用。 Model-View-Presenter还演示抽象您的用户界面以最大限度地重用和单元测试。

当您查看分布式计算时,N层应用程序基础架构也会发光 - 当您希望在客户端计算机上运行Prism应用程序,但希望托管应用程序的数据时会发生什么情况(即SQL Server数据库,例如)在服务器上?如果你的客户端的机器在你的网络上,那很好 - 你可以给它们一个连接字符串给服务器,没问题。但是,如果您计划通过Internet访问数据,则需要抽象应用程序的数据层并提供方法(安全地)通过Internet检索数据。

+0

请评论downvote吗? – Doug 2011-09-26 16:12:27