所以我有一张这样的表:
=========================
ID | Col2 | col3 | col4 |
=========================
-> 21 | balh | blah | foo |
22 | balh | blah | foo |
我正在创建一个对象,它可以使用表达式中的列名从一行读取数据。像这样:
myrow.getValue(col => col.Col2)
我现在遇到的问题是命名对象,我真的找不到一个描述它的功能的名称而不是很长。
你会怎么称呼它?
编辑好的我会添加一些细节,我正在处理一个COM对象,它只允许我一次读取一列。所以我正在编写一个包装器,它可以使用ID从表中(在COM对象内)获取一行,然后让用户使用表达式提供列名(详细信息并不重要)。该对象转到表并使用ID和列名称获取该行的数据。
答案 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)
RowReader
? RowByColumn
? ColumnGrabber
?
真的,问题在于您应该设计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 ];