【发布时间】:2011-05-20 07:19:39
【问题描述】:
我有一些关于框架设计的一般性问题。
我正在 C#.NET(框架 3.5)和 SQL 2008(使用 LINQ)中为 iPhone 应用程序构建 API。我遵循了领域驱动设计模式(在一本书中)和 具有以下文件夹结构:
Core
- DataAccess
--Impl
-Domain
-Impl
Core 是我的核心 API 库 - 我的 DLL。 DataAccess 包含数据访问接口 DataAccess.Impl 包含存储库(LINQ to the DB) 域包含我的大部分数据类型和属性。 Impl 包含我的服务(即 AccountService.cs、EmailService.cs)
现在,作为练习,我向这个项目添加了一个 Windows 服务 并试图从该服务中的 DLL 调用功能。 我的问题是,我应该将哪一层暴露给其他应用程序 什么应该隐藏?
- Impl 文件夹中的服务类应该是程序员看到的吗?
- 还是来自 DataAccess.Impl 的存储库?
- 或者,我应该把它全部展示给程序员看吗?看起来 现在,这似乎有点令人困惑。
当我开始阅读有关 DDD 的内容时,我假设存储库将是 服务类隐藏和访问,但我发现我需要调用 我的客户端中的两个功能。我设计错了吗?
我的另一个问题与命名空间命名有关。当 Windows 服务 从我的核心库调用功能,我必须这样做:
using Company.Product.ProductCore.Core.DataAccess.Impl
using Company.Product.ProductCore.Core.Domain
using Company.Product.ProductCore.Core.Impl
这似乎很罗嗦。查看 Microsoft 的 DLL,它们似乎与两层保持一致 约定 -(System.Linq、System.Text 等)。拥有 Company.Product.ProductCore.Core.Impl 看起来很乱,并没有真正告诉程序员这个命名空间做了什么(但它 是我阅读的示例所建议的)。这里有最佳实践吗?
我们非常感谢您的建议(以及任何示例)。
谢谢。
【问题讨论】:
-
有人想试试这个吗?我可以做些什么来改进/澄清我的问题?谢谢。
-
我假设这是一个 .NET 后端,iPhone 应用程序将通过互联网访问它(是吗?)。 “其他开发人员”是在开发 iPhone 应用还是在这个 .NET 后端工作?
-
或者是某种monotouch 应用程序在 iPhone 上运行?
-
嗨,Marijn,感谢您的回复/cmets。我正在设计服务器和 web api,“其他开发人员”正在开发 iPhone 应用程序,并期待访问 web 方法。
-
在这种情况下,您可能想要创建一个易于使用的 Web 服务外观,类似于 Will 的建议。
标签: c# api design-patterns namespaces domain-driven-design