我们已经实现了适配器设计模式,其工作如下:
项目#3开始让我担心,因为适配器变得比我原先设想的更复杂。我不知道修剪适配器的设计模式。有吗?建议?
答案 0 :(得分:1)
你已经用我喜欢的东西称为"瑞士军刀"图案。
最佳实践说,你应该将你的班级分成至少3个班级,每个班级一个班级。
答案 1 :(得分:-2)
我没有使用适配器或完整的存储库(CRUD操作),而是使用IReader接口进行读取和访问者模式以进行插入更新删除,因此您可以将域逻辑与基础结构(持久性)细节分开,这是一个想法:
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);
}
}
下一步可能是为阅读和访问者添加泛型。在这种情况下,您最终只需要很少的类,并获得灵活性和单一责任,接口隔离等可靠原则的好处。因此,您可以创建一个丰富的封装域,并通过一些设计原则扩展其功能。 此致!