我想知道在为Web服务方法指定参数时,最好的方法是什么以及它的优点。最好用例子来解释。
在我的(SOAP) WebService (由Xamarin移动应用程序使用)中,我有一个WebMethod SubmitForm(int, TransactionData, List<Answer>),其中:
int是项目的ID,并指定要连接到哪个数据库,
TransactionData是一个包含有关用户和表单的数据的DTO,并且
Answer是一个包含单个问题的ID和答案的DTO。
因为我为TransactionData和应答提供了单独的表,所以这些表之间是完全不相关的,但是我正在考虑创建一个新的DTO SubmitRequest,它将包含这3个对象。除了可读性之外,这些选项的优点和缺点是什么,以及从SubmitRequest中实例化和提取的微小开销?
要考虑的另一种情况是接受单一原语类型的WebMethod,如int。让它接受一个int,还是将它封装在一个只包含一个属性的DTO中,会更好吗?坦率地说,我不是后者的粉丝,因为您最终会得到一个字符串、int等等的DTO。
因此,问题是,什么是对制度最有利的?有什么不同吗?或者只是个人喜好的问题?
发布于 2020-03-06 15:05:11
这里有一些东西需要打开:
在方法
它创建了对方法调用方的依赖,因为它现在需要有关参数顺序的知识。如果有一个语义上表示参数的参数,将有助于更多地将事物解耦。在“太多”之前,用你的判断来确定你能容忍多少个参数。
中
它可能出错,或者它可以改进整个代码的语义。当你在一个方法中有几个参数时,他们可能有某种事情(秘密关系),他们不知道该怎么称呼它,所以这取决于你,他们要么属于彼此,一个属于另一个,他们都属于更高层次的抽象。
这里要补充的一点是,您的模型/ DTO不必反映您的DB模式,因此,仅仅因为您将两个模型都放在DTO中,并不意味着它们现在需要一个外键--另一个,只有当您将其中一个DTO放入另一个DTO中时,这才是必要的。
语义学值得麻烦吗?有时是,有时不是。你认为更好地命名它有价值吗?它应该是所有参数事件中臭名昭著的儿童产品的一个属性吗?也许吧。但如果它只是一个参数而且它是原始的..。我只想做任何事。
希望这能有所帮助。告诉我你的想法。
发布于 2020-03-06 14:49:10
老实说,三是有很大的空间与API设计是开放的个人喜好。也就是说,这种偏好应该由设计决策的权衡来决定。从某种意义上讲,SOAP有点欺骗性,因为它允许您表现得好像您的函数有单独的参数,但是当您查看序列化请求时,它都封装在一个相当冗长的XML结构中。本质上,统领他们的“一个DTO”。你的框架对你隐瞒了这一点。
由于SOAP的设计限制,您有能力考虑您的问题。基于您所描述的内容,我个人的偏好是将SOAP视为普通的面向对象编程(OOP)。本质上,保持单独的对象与将它们封装在更大的对象中的思想过程并不只是因为您正在实现的方法被设计为远程调用而改变。
尽管如此,SOAP还有几个注意事项:
这个故事在JSON中确实发生了一些变化。在JSON中需要父请求对象的原因是,在参数方面没有像SOAP中那样的标准化封装。老实说,我上面与SOAP共享的同样的警告也会影响JSON。然而,我并没有在野外遇到违反这些警告的JSON,就像我在SOAP中遇到的那样。
https://softwareengineering.stackexchange.com/questions/406194
复制相似问题