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