我与同龄人就是否将存储库方法的搜索选项封装在对象或(可能增长的)参数列表中是否是一种好习惯进行了辩论。
总而言之,伪代码将是:
SearchItems(int id,string name,int statusId)
VS
class SearchOptions
{
/*
For illustration purposes, I intentionally made the, otherwise private fields public.
Under normal circumstances, they would be private with their respective accessors or mutators or properties for C#
*/
public int id;
public string name;
public int statusId;
}
SearchItems(SearchOptions filter)
{
//Rest of code here
}
参数列表的参数为:
搜索具有仅获得
此时需要的结果。如果搜索要求应该
更改后,应编写具有特定功能的新方法。
即使对象参数表示中断程度较小,搜索选项的任何更改仍将需要修改
跨平台集成更为友好(例如,由于方法签名的简单性,Java服务后端到WCF服务后端)
使对象包含过滤器选项的参数为:(我的参数)
方法保持完好无损,并且可以灵活地进行更改,而无需花费太多精力,也不需要太多工作
方法签名中没有难看的长参数列表
界面保持原样,增加重量,减少重大更改
什么被认为是好的做法?争论是否成立(双方)还是主观?
参考方案
参数列表的参数为:
搜索仅负责获得此时所需的结果。如果搜索要求应更改,则应编写具有特定功能的新方法。
如果Paramter对象专用于搜索方法,则它也可以承担单一责任。例如。
class SearchByIdNameAndStatus { // Maybe you find a better name depending on your use case
public int id;
public string name;
public int statusId;
}
即使对象参数表示中断程度较小,搜索选项的任何更改仍将需要修改。
确实如此。此外...如果在服务器服务方法中使用一个参数对象,则它们彼此依赖。例如。如果更改参数对象,则可能也会影响使用该参数对象的其他服务。
跨平台集成更为友好(例如,由于方法签名的简单性,Java服务后端到WCF服务后端)
也许是。您真的有这个要求吗?您还可以在服务层之上添加一个简单的传输层,以适应不同的传输。
使对象包含过滤器选项的参数为:(我的参数)
方法保持完好无损,并且可以灵活地进行更改,而无需花费太多精力,也不需要太多工作。
我猜您的意思是您不会遇到编译器错误,因为签名不会更改。但是客户端仍然必须设置“新”属性,并且服务必须对其进行解释。因此,工作量确实很少。
方法签名中没有难看的长参数列表
这是一个很好的论点。此外,您可以简单地定义哪些参数是必需的,哪些是可选的。设置搜索参数对象的强制参数构造函数参数,而可选参数将是setter。参数的验证也可以在参数对象中完成。
界面保持原样,增加重量,减少重大更改
我想我已经回答过了。
至少您可以看一下我撰写的博客,也许它可以帮助您在讨论中找到一种方法。看到
https://www.link-intersystems.com/blog/2012/02/26/separation-of-api-and-implementation/
https://www.link-intersystems.com/blog/2012/02/05/simplify-service-layer-design-using-bean-validation-jsr-303/
试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …
JAVA:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
格式化数字的最佳设计模式是什么? - java我需要编写将根据指定选项格式化值的代码。现在可以选择几种格式设置选项:以指定的精度四舍五入/截断数字,添加前缀(例如$)或后缀(例如%),分组数千(应用逗号),添加数字缩写(KMB)。所以数字1857可以显示为$ 2K或$ 1.86K或$ 1,867起初我考虑过为此使用Decorator模式,但我不确定,因为格式化程序应按特定顺序应用,例如首先,我需要应用K…
Java:BigInteger,如何通过OutputStream编写它 - java我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…