带有方法的WCF DataContract类
作者:互联网
这更多是一种哲学/最佳实践问题,而不是技术问题.
是否有反对使用只能在服务器端使用的方法编写DataContract类的强大论据?或未使用DataMember属性修饰的其他属性呢?
例如:
[DataContract]
public class LogEntry
{
[DataMember]
public string Message { get; set; }
[DataMember]
public string Severity { get; set; }
public string SomeOtherProperty { get; set; }
...
public void WriteToDatabase()
{
...
}
}
尽管使用扩展方法可以简化工作,但我不希望避免这样做,这似乎是很多额外的工作.
但是,作为一名优秀的开发人员,我想知道这样做是否不好.
解决方法:
从技术上讲,您可以将实现与数据协定添加到同一类中.只有那些属性会序列化.
在您的示例中,您在同一类中拥有对象,传输和如何写入数据库:
[DataContract]
public class LogEntry
{
...
public void WriteToDatabase()
我建议将序列化的前端代码和对象与持久性分开.我什至会建议一个单独的数据库访问层,它不了解拥有传输和业务逻辑的层或上层的责任.
如果数据库持久性位于数据协定和传输层中,那么随着时间的流逝,如果需要的话,将不可能拆开并替换层-这将是一小段代码.
分离各层也有助于测试.能够测试一个代码单元而没有整个系统的所有依赖关系非常有价值.例如,如果您分离数据库持久性,甚至将其与接口分离,那么为了对业务逻辑进行单元测试,您可以将持久性替换为内存中的子集实现.
问题是如果不了解要传输的对象,如何将这些对象传递给DAL.为了实现分离,我已经看到了一个类型dll,它只包含带有数据协定修饰的这些结构,一个拥有传输层的服务层和一个都引用了类型dll的BLL / DAL.
希望能有所帮助.
标签:datacontract,wcf,c 来源: https://codeday.me/bug/20191107/2003434.html