小编Qua*_*sar的帖子

这需要优先:不要重复自己或单一责任原则?

在升级一些旧代码的同时,我发现了这两个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)

c# oop dry single-responsibility-principle

3
推荐指数
2
解决办法
897
查看次数

标签 统计

c# ×1

dry ×1

oop ×1

single-responsibility-principle ×1