这是一个非常奇怪的架构。请多多包涵。
我们有一个现有的分层应用程序(数据、逻辑/服务、客户端)。最新的要求是服务层要访问两个数据源!!!(没有其他办法)这两个数据源具有相同的数据库架构。
与大多数分层架构一样,我们有如下读写方法:
IEnumerable<Product> GetAllProducts(),
Product GetProductById(ProductKey id),
IEnumerable<Product> FindProductsByName(string name)
产品 DTO 是:
class Product
{
public ProductKey Key { get; set;}
...
}
class ProductKey
{
public long ID { get; }
}
我们将其缩小为两种可能的解决方案:
备选方案 1:在读取方法中添加一个参数,以便服务知道要使用什么数据库,如下所示: Product GetProductById(ProductKey id, DataSource dataSource)
DataSource
是一个枚举。
备选方案 2(我的解决方案):将 DataSource 属性添加到键类。这将在检索对象时由实体框架设置。此外,这不会持久化到数据库中。
class ProductKey
{
public long ID { get; }
public DataSource Source { get; } //enum
}
优点是更改对客户的影响最小。
但是,人们不喜欢这种解决方案,因为
DataSource
不会增加商业价值。(我的回答是它ID
也不会增加商业价值。它是一个代理键。它的目的是跟踪持久性)- 对象图中的孩子也将包含
DataSource
哪些是冗余的
哪种解决方案更合理?你有其他选择吗?
注意:这些服务无处不在。