我正在研究一个庞大而复杂的系统架构。我们的v1.0目标是构建一个具有现代n层结构的应用程序。我们可能会使用Silverlight构建UI,我们可能会使用MVVM模式。
但是,在未来,我们希望提供一些应用程序逻辑作为服务(用于增值ASPX应用程序,自定义扩展,支持iPhone / Windows Phone应用程序等)。 (理想情况下,我们使用的任何UI技术都将使用与原始应用程序相同的服务器端逻辑)
我一直在阅读将MVVM与WPF和Silverlight结合使用。它看起来很棒,但它看起来像你的ViewModel类是客户端和特定于平台(例如,用.Net / Silverlight编写)。
假设我构建了一个大型Silverlight / MVVM应用程序作为v1,然后使用v2,我想将一部分功能公开为传统的aspx网站。我是否必须在JavaScript中重写所有ViewModel?是否有一些指导来构建我的MVVM模式,着眼于保留服务器端代码中所有最重要的逻辑?
答案 0 :(得分:2)
我会说是的,你必须重新编写所有的ViewModel。
此外,对于您的普通旧HTML版本,您可能会使用ASP.NET MVC,这是一种有点不同的方法。此外,HTML版本往往看起来不同,比RIA版本更简单,所以你可能还需要不同的ViewModel。
对于原生iPhone版本,您可以重用相同的Web服务,Silverlight版本。但是,必须完全重写UI。
通过WCF数据服务(ODATA)公开您的数据将使您在任何技术堆栈中的数据访问变得更加容易(甚至比自定义REST更容易)。
答案 1 :(得分:1)
对您的问题不是完整的答案,但在客户端,您可以使用Knockout(JavaScript的MVVM库)在精神/结构中重用您的代码:http://knockoutjs.com/
答案 2 :(得分:1)
我会说这取决于你如何编写视图模型。如果它们只是具有属性的类,则应该能够将它们公开给ASP.NET MVC应用程序。但是,如果您在视图模型中创建/使用Silverlight控件,那么他们当然需要重写。也许您可以构建所有视图模型,使它们具有可供ASP.NET MVC和Silverlight使用的基础部分,然后具有扩展基础并添加特定技术部分的特定视图模型。 VM的。您需要关注的另一件事是Silverlight具有Silverlight特定的类文件。如果对ASP.NET如何使用它们有限制,我不会这样做,但是这会限制.NET的哪些部分可用。
答案 3 :(得分:0)
我只是想知道你是否专注于前端只是有点太多了? 并不是说你的担忧是“坏”或“错误”,我只是认为你可能将车推到马前。
我首先确保您的基础业务逻辑确实合理,然后转向公开它们的服务/ API。如果这个基础好,那么构建下一层将更容易。
您可以在此级别获得的重用次数越多,您在下一层的不同实现中复制/重写的次数就越少。