而不是使用适配器或完整的存储库(CRUD操作),我会使用一个IReader接口读取和访问模式插入更新删除,所以你可以分离领域逻辑从infraestructure(persistance)细节,这是理念:
public class MyBusinessObject : IAcceptBusinessVisitor, IAcceptMyBusinessIdVisitor
{
private readonly string _id;
private string MyPrivateProp { get; set; }
//Fully encapsulated object
public MyBusinessObject(string id, string myPrivateProp)
{
_id = id;
MyPrivateProp = myPrivateProp;
}
public void UpdateMyProp(string newProp)
{
if (string.IsNullOrWhiteSpace(newProp)) throw new ArgumentNullException(nameof(newProp));
//Business rules ...
MyPrivateProp = newProp;
}
public void Accept(IMyBusinessObjectVisitor visitor)
{
if (visitor == null) throw new ArgumentNullException(nameof(visitor));
visitor.Visit(_id, MyPrivateProp);
}
public void Accept(IMyBusinessIdVisitor visitor)
{
if (visitor == null) throw new ArgumentNullException(nameof(visitor));
visitor.Visit(_id);
}
}
public interface IAcceptBusinessVisitor
{
void Accept(IMyBusinessObjectVisitor visitor);
}
public interface IAcceptMyBusinessIdVisitor
{
void Accept(IMyBusinessIdVisitor visitor);
}
public interface IMyBusinessObjectVisitor
{
void Visit(string id, string prop);
}
public interface IMyBusinessIdVisitor
{
void Visit(string id);
}
public class SavePersistanceVitor : IMyBusinessObjectVisitor
{
public void Visit(string id, string prop)
{
//Save to Database
}
}
public class UpdatePersistanceVitor : IMyBusinessObjectVisitor
{
public void Visit(string id, string prop)
{
//Update to Database
}
}
public class DeleteVitor : IMyBusinessIdVisitor
{
public void Visit(string id)
{
//Delete in Database
}
}
这里阅读:
public interface IMyBusinessObjectReader
{
MyBusinessObject Read(string id);
}
class MyBusinessObjectReaderFromDb : IMyBusinessObjectReader
{
public MyBusinessObject Read(string id)
{
//Read from database
string myPrivateProp = "";
return new MyBusinessObject(id, myPrivateProp);
}
}
下一步可能是添加泛型读取和游客。在这种情况下,您最终会得到很小的类,并获得灵活性,以及像单一响应性,接口隔离等固体原理的好处。因此,您可以创建一个丰富的封装域并使用一些设计原则扩展其功能。 关心!
我认为在分离1和2时没有任何价值。2层之间的接口必须将数据转换为数据的代码,这是给定的。即使在GOF中,他们也这样做,我认为这不是经纪人模式,也许因为它与适配器没有区别。 3是我所关心的,我在我的问题中说过。 –
@Abhi在分离1和2时通常有价值,而且我在很多场合都做到了这一点。 1和2实际上几乎无关。但是你正处于决定的最佳位置。只要你考虑你的决定,并且可以向想要知道你为什么做出改变的人解释它,那就没问题。最糟糕的情况是你以后需要做更多的工作。巴斯特案,这一切都有效,每个人都很开心。 – Bohemian