我的团队正致力于创建我们的第一个Silverlight 4应用程序。首先要对实际项目给出一些细节。它将是Silverlight 4,旨在运行Out-oF-Browser,我们将使用WFC将数据服务与我们自己的Dataobjects实现一起使用。 (没有实体框架,LINQ-to-SQL等)。我们有一些顾问正在推荐一个包含超过11个单独项目的解决方案结构。对我们来说,似乎没有理由,任何人都可以看到为什么可能需要以下内容的任何理由?
现在,我们的主要困惑在于为什么我们不会将事物命名为将它们分开,以及诸如“Project.MajorFunctionA”之类的东西,它只是应用程序的一个小组件,为什么它应该有它自己的项目。 (请记住,该特定函数的Views和ViewModel不会存在于该项目中,而是存在于其他Client / ViewModel项目中。
我们正在寻找一些验证,因为我认为没有任何理由。
答案 0 :(得分:3)
同意:将名称空间用于逻辑组织,而不是项目。一种方法是将项目视为部署单位。 Project.Client是否总是与Project.ViewModels一起部署? Project.Models?是一个引用另一个?只需包含在同一个项目中,并使用命名空间进行组织。
您可能希望将Silverlight类库/应用程序分离到单个项目中的几个原因:
关于程序集的另一个注意事项是程序集之间不能有循环引用。换句话说,如果ClassA和ClassB在同一个程序集中,ClassA可以引用ClassB,而ClassB可以引用ClassA。但如果他们在单独的集会中,他们就不能。现在,如果你的类有很多循环引用,那可能不是一件好事,但有时很难避免,如果它们恰好位于不同的程序集中,那么你的选项会受到更多限制。但另一方面,增加组件的数量限制了循环引用的机会,这可以提高设计的质量。还有别的东西需要注意。
遵循该逻辑,一种替代方案是将Project.Client,Project.Data,Project.Model,Project.UIControls和Project.ViewModels分组到一个项目中,并将Project.Common和Project.Infrastructure分组到另一个项目中。 MajorFunctions可以单独保存或分组到Project.Client中。你最终会得到:
另外。对此没有真正正确的答案。我正在标记为社区维基。