我有一张这样的桌子:
=========================
ID | Col2 | col3 | col4 |
=========================
-> 21 | balh | blah | foo |
22 | balh | blah | foo |
我正在创建一个对象,可以使用表达式中的列名称从一行读取数据。像这样的东西:
myrow.getValue(col => col.Col2)
我目前遇到的问题是命名该对象,我无法真正找到一个描述它的功能而不很长的名称。
你会叫它什么?
编辑:我将添加更多细节。我正在使用一个 COM 对象,它一次只能读取一列。 因此,我正在编写一个包装器,它可以使用 ID 从表(COM 对象内部)获取行,然后让用户使用表达式提供列名(细节并不重要)。该对象进入表并使用 ID 和列名称获取该行的数据。
行读取器?
代码看起来像(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。
这是对象的方法而不是对象本身,但我个人的选择是
myRow.ReadRowByCol(...)
,因为它捕获了意图。但我也喜欢保罗的“鲍勃”:-)
ColumnSpaceShipRowReader
如果您正在存放太空飞船。
我会退一步问:为什么要创建一个专门用于从列中读取值的新对象?
在我看来,最好在封装表本身的类中创建一个新的方法(例如readColumn())。
这将是更好的面向对象实践。
类对一个对象进行建模,该对象具有:
在您的特定情况下,表格是数据,读取是对该数据执行的行为。
因此,应该将 read 方法实现为现有数据类中的方法。
如果您创建另一个类来读取数据,您可能需要打开存储数据的类(例如,通过使用 C++ 中的友元类)。 这违反了类的封装,因为您突然允许外部类自由访问您的数据,尽管是以一种潜在受控的方式。
鲍勃? :-)
如果您创建一个使用列名从行中获取一些数据的方法,那么您想要的是方法而不是对象?
data = row.read(columnName);
符合您的描述。如果您比这更具体,您可以使用更能反映您的实际领域或抽象级别的名称。
一般来说,如果你能用一两句话描述你正在做什么,那么名词就是宾语,动词就是方法。
ColumnReader
?
这与做有什么不同:
myrow.Select(col => col.Col2);
?
行渲染器
在我看来,您正在描述一种方法,而不是一个对象。
如果你的对象是代表某行某列的值,那么我想将其称为 Cell 会很省。
RowReader
? RowByColumn
? ColumnGrabber
?
实际上,问题在于您应该设计
Row
对象 - 一个封装与给定行关联的数据的对象(我猜在您的情况下是 ID
)以及该对象应该使用的方法 on返回值。 将 Row
对象称为“Row
”或“Case
”或“DataReference
”或任何对您的应用程序有意义的名称。 然后这些方法就很容易命名(例如,Row.getColumn('col2')
)
注意:仔细想想,
RowReader
对于这个类来说是一个糟糕的名字。 它是不明确的,因为它读取的是“列”,而不是行。 ColumnReader
也不好,原因相反(它通过读取行来读取列)。 Row
需要类,而不是函数。列数据获取器
已编辑之后:abatishchev 评论。谢谢阿巴蒂什切夫。
valueAt
而不是
getValue
:myrow. valueAt( col => col.Col2 );
此外,重载
[]
运算符可能会很好而且很有意义:
var x = myRow["name"];
var x = myRow[ col => col.Col2 ];