在C#中返回状态代码或复杂对象的理想方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在C#中返回状态代码或复杂对象的理想方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1838字,纯文字阅读大概需要3分钟。
内容图文
![在C#中返回状态代码或复杂对象的理想方法是什么?](/upload/InfoBanner/zyjiaocheng/797/cadaf920aa1f442cb844357812dfbab2.jpg)
我想弄清楚如何最好地处理以下场景.我有一台服务器接收消息,处理它们,然后将响应发送回客户端.我想让处理步骤返回有关执行处理结果和某些情况下的对象的详细信息.
我有以下代码:
public void HandleMessage(Connection conn, Packet packet) {
var somedata = packet.Read();
var result = Process(somedata);
if (result == typeof(Message))
SendA(result);
if (result == typeof(MyObject))
SendB(result, extraInfo);
}
public [what goes here] Process(object data) {
if (validated)
return data;
else
return Message.Failed;
}
我想要做的是创造责任分离.
> Receiver:将数据解析为有意义的对象
>处理器:对解析的数据起作用并返回状态代码或对象.
> Sender:解释来自处理器的返回数据,构造数据包,并将其发送给客户端.
我应该尝试实现什么样的设计来实现这样的目标?
解决方法:
避免使用typeof()并更倾向于使用is语法:
if (result is Message)
我的建议是将对象包装在一个状态中,或者一起跳过状态结果,然后从packet.Read()方法返回一个接口,并直接调用接口方法:
public StateResult
{
public StateResultEnum Result;
public IDataObject Data;
}
IDataObject将是一个接口,它将公开可能根据其中包含的数据而变化的方法.
例如:
public interface IDataObject
{
string GetData();
}
public Message : IDataObject
{
public string Contents;
public Message(string contents)
{
Contents = contents;
}
public string GetData()
{
//Convert the string to json
return json;
}
}
public MyObject : IDataObject
{
public string Contents;
public string ExtraInfo;
public MyObject(string contents, string extraInfo)
{
Contents = contents;
ExtraInfo = extraInfo;
}
public string GetData()
{
//Convert the string to json (And include extraInfo)
return json;
}
}
底线:避免在任何地方使用物体.如果可以验证您的数据,请创建一个IValidatable接口,该接口公开一个名为Validate()的方法.当您从函数返回IValidatable时,无论它是哪个对象(MyObject或Message类型)都无关紧要,它们都提供了验证方法,这是在您的界面中定义的.因此,如果您在没有某些转换的情况下无法执行obj.ExtraInfo,您将能够调用obj.Validate().
内容总结
以上是互联网集市为您收集整理的在C#中返回状态代码或复杂对象的理想方法是什么?全部内容,希望文章能够帮你解决在C#中返回状态代码或复杂对象的理想方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。