我对C#和编程很新,所以我问这个问题。
我最近得到了一位同事审查我的代码,他说,对于以下方法,我应该使用一个类来获取一些参数。
public List<Items> DoSomething(List<OtherItems> someItems, int amountOfItems,
DbGeopgrahpy Location)
{ //More stuff, irrelevant to the question.
他指出我应该将amountOfItems
和Location
放在一个包含这些值的类中。
将从控制器调用此方法,该控制器将此数据返回给客户端。
现在我的问题是为什么?我知道它会提高可读性(可以说是imo),但使用类作为参数有什么好处吗?我想我可以假设,当你每次要调用这个方法时都必须声明一个类时,这甚至会对性能产生负面影响。
我还发现结构可以这种方式使用,如果这是一个很好的实践,我什么时候应该使用结构?什么时候应该使用类?
答案 0 :(得分:4)
使用DTO类作为方法参数而不是参数集合的好处之一是防止将来对方法进行签名修改。这可能对API公共方法很有用,例如,允许您在不破坏更改/方法版本控制的情况下修改API。
假设您需要更新/修改方法,因此需要传递其他参数。如果您的方法只需要一个参数,即class / struct,那么您不需要更改方法的签名。相反,您只需向DTO类添加其他属性即可。
答案 1 :(得分:2)
我认为这更像是一种设计意识。如果该方法需要太多可以封装在另一个对象中的参数,那么就会发现您可能没有完成一个好的对象定义。此外,随着您的软件开始增长,您会发现尝试将所有内容分组在类中会更好,这样您和与您合作的人就会更容易保持这种方式。
//avoid
public void Checkout(string shippingName, string shippingCity,
string shippingSate, string shippingZip, string billingName,
string billingCity, string billingSate, string billingZip)
{
}
//DO
public void Checkout(ShippingAddress shippingAddress,BillingAddress billingAddress)
{
}
如您所见,公共属性已分组到一个将它们分组的公共类。您必须应用您的标准并进行良好的分组。
答案 2 :(得分:2)
答案 3 :(得分:0)
就个人而言,我发现如果我有超过3或4个逻辑分组的参数(属于相同类型的对象或信息),那么我将使用一个类。
这是非常随意的,就像你发现的那样。每个人都有自己的规则来决定何时使用类/结构。