문제

두 개의 서브 클래스가있는 슈퍼 클래스가 있습니다. 두 하위 클래스에는 장에 내용이 있는지 확인하는 메소드가 있습니다. 서브 클래스 1의 경우이 방법은 hascontent (int chaperId)이고 서브 클래스 2의 경우 hascontent (int 챕터, int 기관)입니다. 보시다시피 서브 클래스 2에는 추가 매개 변수가 있습니다. 두 방법의 목적은 동일합니다.

나는 방법을 슈퍼 클래스에 넣을 것이라고 생각했다. 내가 이것을해야한다고 생각하십니까? 그렇다면 어떻게 구현해야합니까? 아니면 두 가지 방법을 자신의 서브 클래스에 넣는 것이 더 현명합니까?

편집하다:

Hasdocuments의 본문은 다음과 같습니다. subclass1 :

Database DB = new Database();
int res = DB.ExecuteSpRetVal(chapterID, mInstitutionID);

if (res > 0)
    return true;
else
    return false;

서브 클래스 2 :

Database DB = new Database();
int res = DB.ExecuteSpRetVal(chapterID);

if (res > 0)
    return true;
else
    return false;
도움이 되었습니까?

해결책

편집하다: 질문 업데이트에 따라 업데이트되었습니다.

두 방법 모두에서 거의 동일한 논리를 분명히 가지고 있기 때문에 다음과 같이 리팩터링 할 것입니다.

abstract class SuperClass
{
    protected bool HasContentImpl(int chapterID, int institution)
    {
        Database db = new Database();
        int result;

        if (institution >= 0) // assuming negative numbers are out of range
            result = db.ExecuteSpRetVal(chapterID, institution);
        else
            result = db.ExecuteSpRetVal(chapterID);

        return result > 0;
    }
}

class SubClass1 : SuperClass
{
    public bool HasContent(int chapterID)
    {
        return base.HasContentImpl(chapterID, -1);
    }
}

class SubClass2 : SuperClass
{
    public bool HasContent(int chapterID, int institution)
    {
        return base.HasContentImpl(chapterID, institution);
    }
}

다른 팁

인수가 다른 두 개의 인수를 슈퍼 클래스에 배치하여 메소드 과부하를 사용하십시오. HasContent를 호출하면 제공 한 인수의 수와 유형과 일치하는 것이 사용됩니다. 슈퍼 클래스에 있기 때문에 나중에이 방법을 사용하는 새로운 서브 클래스를 만들기로 결정한 경우 또 다른 사본을 만들 필요가 없습니다. 예를 들어 코드를 참조하십시오.

protected bool HasContent(int chapterID, int institution)
{
    Database db = new Database();
    int result;

    result = db.ExecuteSpRetVal(chapterID, institution);

    return result > 0;
}

protected bool HasContent(int chapterID)
{
    Database db = new Database();
    int result;

    result = db.ExecuteSpRetVal(chapterID);

    return result > 0;
}

당신은 말했습니다 :

두 방법의 목적은 동일합니다

그렇습니다. 슈퍼 클래스에 넣을 수있는 일반적인 방법이 있다고 생각합니다.

hascontent ()가 다른 증강을 취하기 때문에 나는 그것을 기본 클래스로 옮기지 않을 것입니다. 두 가지 방법이 동일하다는 사실이 같은 일을한다는 것을 의미하지는 않습니다.

나는 당신의 코드 기반이나 당신이 작업중인 시스템이 어떤 일을하는지 모르겠지만, 내가 가진 작은 정보가 주어지면 당신의 디자인에 관한 것입니다. 느낌 WRONGE. 나는 과거에 이런 종류의 디자인 문제가있을 때 자주 데이터가 모델 인 다른 문제로 인한 것임을 발견했습니다. 시스템의 나머지 부분을 변경할 수 없다면 도움이되지 않아서 죄송합니다….

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top