而不是使用適配器或完整的存儲庫(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