0

C++ でクラスのインターフェイスを実装する必要があります。ここでは、2 種類のセットに関連して発生したイベントを要求する必要があります。ここでは、人物とアクションとしましょう。可能なすべての組み合わせで個人識別子とアクション識別子を要求する必要があります (それらすべて、識別子の 1 つだけを指定するか、両方を指定します)
オプション 1)

// Asks for all events occured for every combination
int getNumberofEvents(float param1)
// Asks for all events occured for idPerson AND all possible value of idAction
int getNumberofEvents(int idPerson, float param1)  
// Asks for all events occured in idAction AND all possible value of idPerson
int getNumberofEvents(int idAction, float param1)
// Asks for all events occured in idPerson AND idAction
int getNumberofEvents(int idPerson, int idAction, float param1)

このオプションは読みやすいですが、可能な組み合わせごとに異なるインターフェイスを実装する必要があるため、新しい識別子を含めると 8 つのメソッドが存在することになります (2³)。

オプション 2)

static const int ALL_PERSONS= 0;
static const int ALL_ACTIONS= 0;
int getNumberofEvents(int idPerson, int idAction, float param1)

このオプションのメソッド インターフェイスは 1 つだけですが、「すべての可能な ID」を検索するパブリック マジック ナンバーを導入します。

使いやすさとさらなる保守性については、これら 2 つの選択肢の中でどちらが最適かを考えています (もちろん、ここに含めていない他のより良いオプションもある可能性があります)。

ありがとう。

4

3 に答える 3

2

オプション 2 を変更して、マジック ナンバーを回避し、アクション パラメーターに個人 ID を渡す問題を回避したり、その逆を行ったりすることもできます。

struct Person
{
    explicit Person(int x) : id (x) {}
    int id;
    static Person ALL;
};

Person Person::ALL(0);

struct Action
{
    explicit Action(int x) : id (x) {}
    int id;
    static Action ALL;
};

Action Action::ALL(0);

int getNumberofEvents(const Person& person, const Action& action, float param1);

// ...

int count = getNumberOfEvents(Person(3), Action::ALL, 1.0f);
于 2013-11-08T05:49:48.497 に答える