我知道这个问题之前似乎已经回答过了,但我觉得答案因情况而异,所以在阅读了几篇文章后,我不确定哪种情况最适合我的架构。
我有一个组件库,它具有数据模型和基本功能,任何实现此组件的应用程序都应该使用这些功能。
我有这个组件的边界,它有一个接口 IReader 来加载和处理磁盘中的文件,以及 IDataMapper 来提供数据库访问和 CRUD 操作。用于特定功能的一些其他接口,例如用于比较对象的 IObjectComparison、来自 XML 序列化的 IXMLSerialization。
我不确定在哪里存储这些接口的定义。
选项包括:
1)- 在核心库中,然后当我编写实现时,我将不得不在这个核心组件中包含实现库,并且我希望保持与实现的分离。
2)- 在一个单独的库项目(程序集)中。那里的所有接口都包含在核心组件中并包含在实现库中。
3) - 在实现库中,核心组件必须包含实现库。
唯一看起来合理解耦的情况是,如果我将所有接口放在一个单独的程序集库中,其中包含核心组件和我可能需要的任何实现。
你们认为最佳选择的优点/缺点是什么?我想要实现的只是一个解耦的架构。
所以当我这样做的时候
构造函数:
CoreComponent(IReader Reader, IDataMapper Mapper)
new CoreComponent(WindowsReader, SQLServerMapper)
并且不必在核心组件中包含WindowsReader或SQLServerMapper
干杯。