所以我在业务逻辑中有一些类.dll。它不包含在datacontract中,我想通过在Service和IService类中(例如)将它暴露给调用服务的任何东西。但我见过的唯一例子是公开在服务中定义的类,我不希望这样做,如果有意义的话,我不希望在我的业务逻辑层中使用[Datacontract]?
询问是否需要澄清。帮助总是最受欢迎。
谢谢:)
编辑:我对许多这些解决方案感到有些困惑,我想要做的是为服务的调用者提供一系列类到实例,然后通过方法传递回服务。所以:
public Class ServiceConsumer{
addPerson(){
theService.addPerson(new theService.Person("Thomas", 22, "Male");
}
}
这有意义吗?这有点伪编码,因为我不记得WCF的消费者方面是否已经脱颖而出。所有解决方案似乎都需要了解哪些类可用,或者在一个类中将类混合在一起?
到目前为止,我能看到的唯一其他解决方案是为每个班级设置一个方法,但是让我告诉你可能会有一百个班级!
非常感谢。
答案 0 :(得分:0)
对于初学者,请勿使用[DataContract]注释业务对象。这被认为是不好的做法。
关于数据合同的video Miguel谈论约35分钟。
答案 1 :(得分:0)
您需要使用的是Data Transfer Object。它将确保您的业务层和服务层之间存在适当的分离。另请查看link。
答案 2 :(得分:0)
虽然你应该正确分层,但在某些情况下,你真的不需要分离UI,服务和业务逻辑。通常,当您开发一个较小的项目时会发生这种情况,并且它实际上不会增长。
如果您选择仍想执行此操作,请参阅下面的示例。您基本上要将您的类型包装在像“RequestContract”这样的代理中。在我的情况下,我的BL类型将是MyType和ByMyType。这两个类没有注释,它们是使用服务中定义的DataContracts引入的。
public class ExampleService : IExampleService
{
public ExampleService() { }
public GetMyTypeResponseContract GetMyType(GetMyTypeRequestContract theType)
{
return new GetMyTypeResponseContract()
{
MyType = new MyType()
{
Response = theType.ByMyType.Request
}
};
}
}
[DataContract]
public class GetMyTypeRequestContract
{
[DataMember]
public ByMyType ByMyType { get; set; }
public GetMyTypeRequestContract() { }
}
[DataContract]
public class GetMyTypeResponseContract
{
[DataMember]
public MyType MyType { get; set; }
public GetMyTypeResponseContract() { }
}
答案 3 :(得分:0)
您是否考虑过使用POCO - http://msdn.microsoft.com/en-us/library/ee705457.aspx
答案 4 :(得分:0)
从技术角度来看,您可以使用surrogate。