我正在开发一个应用程序,它按以下方式划分(稍微简化一下)
App
|
Framework
|
Data (Persistance)
|
Data.Couchbase
在App内部,我们正在设置DI容器并注册当需要特定接口时将使用哪些具体实现。例如,在Data命名空间中的IUserRepository将由Data.Couchbase命名空间中的CouchbaseUserRepository来实现。将来,如果我们用另一种技术替换持久化层,比如Mongo,我们可以更新DI注册表,并且它将被MongoUserRepository所实现。
这很好....
问题1
提供跨系统边界的接口显然有好处,但在Data.Couchbase命名空间本身内呢?如果ICouchbaseUserRepository不提供任何额外的功能,那么有必要吗?似乎如果我们注册IUserRepository -> CouchbaseUserRepository就足够了?同样,在具体实现中,是否有必要进一步将这些组件拆分为可能不会被替换的接口?
问题2
同样,在Framework中拥有一堆仅用于代理到Data接口的接口是否值得?因此,App只能依赖于Framework而不必依赖于Data。我可以看到优点...实际上也许我看不到...如果这些程序集将位于同一台机器上,似乎我们将在框架中拥有数百个接口,而我们只需依赖于“Data”尤其是如果这些程序集将位于同一台机器上。