你会怎么称呼这个物体?

时间:2009-03-05 22:54:11

标签: naming-conventions

所以我有一张这样的表:

   =========================
   ID | Col2 | col3 | col4 |
   =========================
-> 21 | balh | blah |  foo |
   22 | balh | blah |  foo |

我正在创建一个对象,它可以使用表达式中的列名从一行读取数据。像这样:

 myrow.getValue(col => col.Col2)

我现在遇到的问题是命名对象,我真的找不到一个描述它的功能的名称而不是很长。

你会怎么称呼它?

编辑好的我会添加一些细节,我正在处理一个COM对象,它只允许我一次读取一列。所以我正在编写一个包装器,它可以使用ID从表中(在COM对象内)获取一行,然后让用户使用表达式提供列名(详细信息并不重要)。该对象转到表并使用ID和列名称获取该行的数据。

12 个答案:

答案 0 :(得分:2)

RowReader?

代码看起来像(Get命名的一些变体)

var reader = new RowReader(sourceRow);

//var value = reader.GetValue(col => col.Col2);
//var value = reader.ByColumn(col => col.Col2);
//var value = reader.ReadColumn (col => col.Col2);

基于其他人的信息,可能是:RowColumnsReader。在这种情况下,该方法将是Read。

答案 1 :(得分:1)

我会退后一步并问:为什么要创建专门用于从列中读取值的新对象?

在我看来,最好在封装表本身的类中创建一个新的方法(例如readColumn())。

这将是更好的OO练习。

一个类为具有以下内容的对象建模:

  • 某些属性/数据(成员数据
  • 某些行为(成员方法)。

在您的特定情况下,表格是数据,并且读取是在数据上执行的行为

因此,应该将read方法实现为现有数据类中的方法。

如果您创建另一个类来读取数据,您可能需要打开存储数据的类(例如,通过在C ++中使用友元类)。这违反了类的封装,因为您突然允许外部类可以自由访问您的数据,尽管是以可能受控的方式。

答案 2 :(得分:1)

ColumnSpaceShipRowReader

如果您要存放太空船。

答案 3 :(得分:1)

鲍勃? : - )

如果您创建一个使用列名从行中获取某些数据的方法,那么您想要的是一个方法而不是一个对象?

data = row.read(columnName);

符合您的说明。如果您更具体,可以使用更接近您的实际域或抽象级别的名称。

一般来说,如果你能用一两句话描述你在做什么,名词就是对象而动词就是方法。

答案 4 :(得分:1)

这是一个对象而不是对象本身的方法,但我个人的选择是myRow.ReadRowByCol(...),因为它捕获了意图。但我也喜欢Paul的“Bob”: - )

答案 5 :(得分:0)

ColumnReader

答案 6 :(得分:0)

这与做法有何不同:

myrow.Select(col => col.Col2);

答案 7 :(得分:0)

怎么样:

ColumnDataFetcher

<强> EDITED

之后:abatishchev评论。谢谢你abatishchev。

答案 8 :(得分:0)

RowRenderer

答案 9 :(得分:0)

RowReaderRowByColumnColumnGrabber

真的,问题在于您应该设计Row对象 - 一个封装与给定行关联的数据的对象(我想在你的情况下为ID)和方法 on 该对象应返回值。将Row对象称为“Row”或“Case”或“DataReference”或任何对您的应用有意义的对象。然后这些方法很容易命名(例如,Row.getColumn('col2')

注意RowReader,在反思中,这个类是一个糟糕的名字。这是不明确的,因为它正在读取,而不是行。 ColumnReader也很糟糕,原因相反(它通过读取行​​来读取列)。 Row需要类,而不是函数。

答案 10 :(得分:0)

听起来像是在描述一种方法,而不是一种物体。

如果你的对象要表示某一行的列的值,那么我想将它称为Cell是非常值得的。

答案 11 :(得分:-1)

我更喜欢valueAt而不是getValue

myrow. valueAt( col => col.Col2 );

此外,让[]运算符重载可能很有意义:

var x = myRow["name"];
var x = myRow[ col => col.Col2 ];