其他分享
首页 > 其他分享> > 带有方法的WCF DataContract类

带有方法的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