【发布时间】:2015-05-06 10:18:46
【问题描述】:
我正在查看我正在处理的项目中的一些代码,发现如下内容:
string personName = currentPerson.Name;
personModel.editPerson(idNr, personName);
上面是一个简单的例子,但也可能像下面这样:
string idNr= currentPerson.IdNr;
string personName = currentPerson.Name;
string age = currentPerson.Age;
...
string editor = AuthenticatedUser.Name;
personModel.editPerson(idNr, personName, age, gender, whatever, nationality, ..., currentTime, editor, weather, windspeed, topScorer, teethAmount, ...);
问题: 是否应将上述内容替换为:
personModel.editPerson(currentPerson.idNr, currentPerson.Name);
和:
personModel.editPerson(currentPerson.idNr, currentPerson.Name, currentPerson.Age, currentPerson.Gender, currentPerson.Whatever, currentPerson.Nationality, ..., theTime.current, weather.Status, wind.speed, scorers.topScorer, mouth.teethAmount, ...);
分别?
我认为为了可读性,将值放入变量会更好,但我猜性能会受到影响(即使是轻微的)。对于第一个示例,使用的参数很少,性能损失会更轻。
在我们的团队中,有人说最好以难以察觉的性能损失的低价获得可读性(特别是对于初级开发人员),而另一些人则说,如果这些变量过多而仅用于提高可读性的目的,则会影响最终会产生可能会引起注意的性能损失。
编辑
我将尝试用一个示例来解释我用值填充对象并在之后分配它们的意思。
想象一个有多个输入的表单:
public ActionResult _SavePerson(string id, string name, ...)
{
personModel.editPerson(id, name, ...);
...
editPerson 方法:
public void editPerson(string id, string name, ...)
{
webService1.client client = new ....;
webService1.personType pt = new ...;
pt.name = name;
pt.id = id;
pt. ....;
client.setPerson(pt);
....
}
如果我要传递一个对象作为参数:
public ActionResult _SavePerson(string id, string name, ...)
{
Person person = new ...;
person.id = id;
person.name = name;
personModel.editPerson(person);
...
editPerson 方法:
public void editPerson(Person person)
{
webService1.client client = new ....;
webService1.personType pt = new ...;
pt.name = person.name;
pt.id = person.id;
pt. ....;
client.setPerson(pt);
....
}
你能理解我的疑惑吗?
【问题讨论】:
-
我个人觉得没有中间变量更容易阅读,因为您可以准确地看到数据的来源以及传递的位置。通过添加变量,您只能看到它是从什么分配的,或者它被传递到哪里,而不是在一行中。
-
性能不会受到影响。但在我的 看来,直接传递属性的可读性更好。变量增加了额外的不必要的间接性。另外,尽量不要命名那些做完全不同的事情的方法。我正在使用这样的代码库,我可以告诉你,拥有 20 种不同的名为
editPerson的方法会让人想杀了你 :) -
为什么不
personModel.editPerson(currentPerson)? -
我会传递一个对象,而不是一个有 10 多个参数的方法。
-
根据您的编辑,我知道您有不同的对象,具体取决于它们所使用的图层。在这种情况下,这就是映射器的用途! (因此您可以使用其他人的建议,每个参数一个实体)。
标签: c# .net performance readability