目前,在我的团队中,我们对asp.net mvc项目中的一些问题进行了现场辩论。 简而言之,我们应该将对象用作参数的某种容器,以便在我们的项目中调用方法...另一方面(我:))更多的是方法应该被调用用原始参数......
您认为什么是最好的方法,在哪种情况下适合您?
谢谢你:)答案 0 :(得分:4)
是的,模型/对象应该传递给方法。它是如何使用框架的 - 因此是内置的模型绑定器。
将对象作为参数传递的方法还允许您重构和更改实现的详细信息,而无需在整个代码中更改方法签名,如果您希望在方法调用中包含新的数据项,则可以简单地向模型对象添加新属性,而不是更改方法签名。它是一种更灵活,更易于阅读的方法。
相比之下,我相信你会在“遗产”中看到方法签名。在开发人员不断添加参数的任何重要时代的项目中,代码库都会失控,而不是使用对象(不是我的代码,我应该添加,以免我的声誉被破坏!) - 这种事情可以当代码快速开发并且可能导致代码腐烂时,快速失控。
最后,关于方法参数的更一般说明,如果你开始有超过4或5,那么这通常表明你的方法做得太多,需要对SOC进行重构(分离关注)。
答案 1 :(得分:0)
对于简单的操作,例如Add()
,您当然会提供两个原始数字,而不是AdditionParameters
个对象。但是对于SetupCustomerEnvironment()
方法或其他东西,您可以想象使用一个或多个对象来描述环境的外观。
我喜欢区分实际与方法名称“交互”的参数,就像您正在谈论(Add()
数字number1
到number2
)参数改变行为方法。如果有Add()
number1
到number2
的多种方式,您可以提供一个AdditionBehavior
对象,该对象解释了如果结果超出所使用的数据类型该怎么做(溢出)。
答案 2 :(得分:0)
如果您正在使用MVC(模型 - 视图 - 控制器),那么我会说通常最好用对象(或模型)调用方法。这符合使用MVC的要点。如果您的模型具有大量参数,则方法签名可能会变得非常长。此外,其他可能使用您的代码的程序员将能够更好地抽象它。
答案 3 :(得分:0)
我强烈建议您为参数使用对象。这是真正的MVVM,不仅可以为您提供抽象,还可以提供遏制。在我的项目中,我的所有域模型都映射到视图模型,这些模型将在视图中使用,但仅包含所需的信息。这些视图模型在视图和控制器之间传递。这给人一个清晰的印象,即视图中需要什么,无论何时添加/删除任何内容,您都不会在View Model类中更改控制器签名而是简单的修改。
还有一种情况是您在客户端使用繁重的Javascript。因此,在Javascript变量中逐个复制View变量听起来不是一个好策略。您可以简单地JSONinify您的整个ViewModel,它将在客户端可用。当你使用像KnockoutJS或BackboneJS这样的东西时,这非常重要。
答案 4 :(得分:0)
根据经验,如果你有一个方法接受五个以上的参数,那么它通常应该是一个对象。
如果我们严格地谈论MVC操作方法,那么我会在有限的情况下将其减少为一个参数(其中不需要视图模型的其他好处,如验证和元数据)。