在升级一些旧代码的同时,我发现了这两个OO原则似乎彼此冲突的情况.
考虑以下伪代码(它是我遇到的简化版本):
int numberOfNewRecords;
int numberOfOldRecords;
int numberOfUndefinedRecords;
void ColourAndCount()
{
foreach(Row row in dataGridView1.Rows)
{
switch(row.Cells["Status"])
{
case: "Old"
row.BackColor = Color.Red;
numberOfOldRecords++;
break;
case: "New"
row.BackColor = Color.Blue;
numberOfNewRecords++;
break;
default:
row.BackColor = Color.White;
numberOfUndefinedRecords++;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码做了两件事:它按照状态记录了记录的数量,并且还根据状态再次对每一行进行着色.它很麻烦,但由于这两个操作(到目前为止)总是同时被调用,因此它没有引起任何问题,并且使得像其他状态一样的维护要求很容易添加.
然而,单一责任原则告诉我,我应该将其分为两个单独的方法:
(编辑)次要说明:我刚刚意识到我可能在这里滥用"单一责任原则"一词,据我所知它指的是类."每种方法一种操作"设计模式的术语是什么?
int numberOfNewRecords;
int numberOfOldRecords;
int numberOfUndefinedRecords;
void Count()
{
foreach(Row row in dataGridView1.Rows)
{
switch(row.Cells["Status"])
{
case: "Old"
numberOfOldRecords++;
break;
case: "New"
numberOfNewRecords++;
break;
default:
numberOfUndefinedRecords++;
break;
}
}
}
void Colour()
{
foreach(Row row in …Run Code Online (Sandbox Code Playgroud)