Silverlight 应用程序项目结构 - 多少才算太多?

发布于 2024-09-25 14:50:26 字数 1428 浏览 4 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

入怼 2024-10-02 14:50:26

同意:使用命名空间进行逻辑组织,而不是项目。一种方法是将项目视为部署单元。 Project.Client 是否始终与 Project.ViewModels 一起部署?项目.模型?一个引用另一个吗?只需包含在同一个项目中并使用命名空间进行组织即可。

您可能希望将 Silverlight 类库/应用程序分离到单独的项目中的几个原因:

  • 重用。您想要开发可用于其他应用程序的 API。您的 Project.Infrastructure 可能属于此类。
  • 模块化。 MajorFunctionA 仅在 20% 的时间内由最终用户使用。也许只有某些经过身份验证的用户才能访问。也许只有在导航到没有人访问的特定页面时才可以访问。您可以选择构建单独的 Silverlight 应用程序,并仅根据需要使用 MEF 或 PRISM 等框架下载 .xap。
  • 开发人员工作流程。一个城市/办公室的一个团队正在处理 Project.Client,而另一个城市/办公室的另一个团队正在处理 Project.Models。构建单独的项目以使生活更轻松可能是有意义的。

关于程序集需要注意的另一件事是程序集之间不能有循环引用。换句话说,如果ClassA和ClassB在同一个程序集中,ClassA可以引用ClassB,ClassB可以引用ClassA。但如果它们位于不同的程序集中,则不能。现在,如果您的类有很多循环引用,这可能不是一件好事,但有时很难避免,并且如果它们碰巧位于单独的程序集中,您的选择会受到更多限制。但另一方面,增加装配数量会限制循环引用的机会,而循环引用可以提高设计质量。只是还有其他需要注意的事情。

按照这一逻辑,一种替代方案是将 Project.Client、Project.Data、Project.Model、Project.UIControls 和 Project.ViewModels 分组到一个项目中,并将 Project.Common 和 Project.Infrastruct 分组到另一个项目中。 MajorFunctions 可以分开或分组到 Project.Client 中。您最终会得到:

  • Project.Client - 应用程序特定的接口、视图模型和模型。
  • Project.Infrastructure - 通用的、可重用的帮助器、转换器和接口。
  • Project.UnitTests
  • Project.Web
  • Project.Web.Infrastruct

也。这个问题并没有真正正确的答案。我将其标记为社区 Wiki。

Agreed: Use namespaces for logical organization, not projects. One approach is to think of projects as units of deployment. Will Project.Client always be deployed with Project.ViewModels? Project.Models? Is one referencing the other? Just include in the same project and use namespaces for organization.

A few reasons why you may want to separate Silverlight class libraries/applications into individual projects:

  • Reuse. You want to develop APIs that will be used for other applications. Your Project.Infrastructure may fall into this category.
  • Modularity. MajorFunctionA is only used by the end user 20% of the time. Maybe only certain authenticated users have access. Maybe it is only access when navigated to a specific page that noone goes to. You could choose to build into separate Silverlight apps and only download the .xaps as needed using frameworks like MEF or PRISM.
  • Developer Workflows. One team in one city/office is working on Project.Client and another team in another city/office is working on Project.Models. It might make sense to build into separate projects to make life easier.

One other thing to note about assemblies is that you can't have circular references between assemblies. In other words, if ClassA and ClassB are in the same assembly, ClassA can reference ClassB, and ClassB can reference ClassA. But if they're in separate assemblies, they can't. Now, if your classes have a lot of circular references, that's probably not a good thing, but sometimes it's difficult to avoid, and your options are much more limited if they happen to be in separate assemblies. But on the flip side, increasing the number of assemblies limits the opportunity for circular references, which can improve the quality of your design. Just something else to be aware of.

Following that logic, one alternative would be grouping Project.Client, Project.Data, Project.Model, Project.UIControls, and Project.ViewModels in one project and grouping Project.Common and Project.Infrastructure into another. MajorFunctions could be left separate or grouped into Project.Client. You would end up with:

  • Project.Client - Application specific interface, view models, and models.
  • Project.Infrastructure - Common, reusable helpers, converters, and interfaces.
  • Project.UnitTests
  • Project.Web
  • Project.Web.Infrastructure

Also. There's not really a correct answer for this. I'm tagging as Community Wiki.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文