- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
背景:我需要发布一个简单的项目,它将用于将数据从我的存储传输到其他地方(将使用我的 WCF 的其他开发人员。WCF 将用于传输数据(保护 DB 等) . 我在我的项目(基础部分)中使用了洋葱架构。
--------------------------------------
| WCF |
| ---------------------------------- |
| | Interfaces for working with DB | |
| | ------------- | |
| | |DomainModel| | |
| | ------------- | |
| -----------------------------------|
--------------------------------------
我用一个简单的例子来展示我的问题:
我有这样的 DomainModel:
[DataContract]
public class User
{
private string _name;
private List<Text> _texts;
public User(string name, List<Text> texts)
{
_name = name;
_texts = texts;
}
[DataMember]
public string Name { get { return _name; } }
[DataMember]
public List<Text> Texts { get { return _texts; } }
}
[DataContract]
public class Text
{
private string _name;
public Text(string name)
{
_name = name;
}
[DataMember]
public string Name { get { return _name; } }
}
WCF 服务有这个方法:
public DomainModel.User ReturnUser()
{
User user = new User("Texts",
new List<Text>()
{
new Text("TextOne"),
new Text("TextTwo")
});
return user;
}
但是当我调用方法的时候
static void Main(string[] args)
{
try
{
ServiceRomanClient client = new ServiceRomanClient();
User user = client.ReturnUser();
Console.WriteLine(user.Name);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
我得到这个异常:这可能是由于服务端点绑定(bind)未使用 HTTP 协议(protocol)。这也可能是由于 HTTP 请求上下文被服务器中止(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。
如果我在此更改 DomainModel 中的属性(我添加了设置)
[DataContract]
public class User
{
private string _name;
private List<Text> _texts;
public User(string name, List<Text> texts)
{
_name = name;
_texts = texts;
}
[DataMember]
public string Name { get { return _name; } set{ _name = value; } }
[DataMember]
public List<Text> Texts { get { return _texts; } set { _texts = value; } }
}
[DataContract]
public class Text
{
private string _name;
public Text(string name)
{
_name = name;
}
[DataMember]
public string Name { get { return _name; } set{ _name = value;} }
}
我没有执行权限,但我违反了 S.O.L.I.D 原则。
我不想将 set 添加到 DomainModel 中,我建议解决此问题的更好方法是在 DomainModel 和 WCF 之间创建一个传输层。
如果您能根据您的经验告诉我您的想法,我将不胜感激。
最佳答案
您可以为该属性提供一个私有(private) setter 。这样数据协定序列化器应该仍然能够序列化对象,但您不会将属性的 setter 暴露给域模型之外的任何代码。
或者,您可以实现一个数据传输对象,它实际上只是一个具有一组公共(public) getter 和 setter 的类,并将其用作您的 WCF 数据协定。我想这个选项的缺点是您必须编写一些映射代码或使用自动映射工具在您的域模型和数据传输对象之间进行映射。
关于c# - 如何在 WCF 中使用 DomainModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082629/
背景:我需要发布一个简单的项目,它将用于将数据从我的存储传输到其他地方(将使用我的 WCF 的其他开发人员。WCF 将用于传输数据(保护 DB 等) . 我在我的项目(基础部分)中使用了洋葱架构。 -
我一直在使用 asp.net mvc 和 nhibernate 开发网络应用程序。我正在尝试遵循 DDD 的一些原则和 Asp.Net MVC 的最佳实践。我的问题是关于使用 VIewModels 清
我想使用 EMF 生成代码,因此我编写了一些方法来加载我自己生成的 UML2 文件。这适用于以下代码: protected void registerResources() { resourc
我在 android 应用程序中使用 Realm 数据库我已经按照文档集成了 Realm 数据库,如下所示: build.gradle(项目级别) dependencies { cla
我是一名优秀的程序员,十分优秀!