したがって、次のクラスがあります。
public class BudgetAmounts
{
public readonly int BudgetFk;//Foreign key to Budget
public readonly int ItemSalesGroupFk;//Foreign key to the type of product being budgeted
public readonly decimal DollarAmount;
public readonly int UnitAmount;
...
}
このクラスは、上記の4つの列を持つテーブルを表します。 DollarAmountとUnitAmountの間に関係はありません-2つの値は完全に独立しています。
コードレビューで、クラスには単数形の「BudgetAmount」という名前を付ける必要があることを指摘しました。そうでなければ、あなたは次のようなものを持っているでしょう:
var amountses = new List<BudgetAmounts>();
ただし、クラスには2つの金額(ドルと単位)があるため、単数として指定しても意味がないことが指摘されました。
続行する最良の方法は何ですか?
私のチームでJohn Wuとcandied_orangeからのコメントを確認した後、makeが単数になるように物事を再設計することが最善のアプローチであることに同意しました。これを(コードとデータベースの両方で)「BudgetAmounts」の代わりに「BudgetLine」と呼びます。
それが実際に複数の金額であるか、単一の金額の単なる複数の表現であるかに依存すると私は主張します。たとえば、温度を見てみましょう。私は次のことができます:
TempCelcius = 100;
TempFahrenheit = 212;
TempKelvin = 373;
それらはすべて同じ温度であるため、Temperature
クラスの単一インスタンスでは問題ありません。したがって、あなたのケースがこれと多少似ている場合は、それを単数形にしてください。金額が異なる場合は、複数にしてください。
chat から:
DollarAmountが10進数でUnitAmountがintなのはなぜですか?通常、SalesGroupが何であるかに応じて、どちらか一方のみを使用します。モーターの場合は100ドル、ボートの場合は5ドルを予算できます。その場合、モーターの数に関係なく100ドル相当のモーターを販売し、各ボートの販売量に関係なく5隻のボートを販売するとします。まれなケースでは、両方の予算を立てることがありますが、2つの数値は独立しています。
SalesProjection
をお勧めします。これが、このデータが実際にあるものだからです。予算ではありません。それは反予算です。これは出さないで受け取るお金です。
売上予測とは、企業が将来のある時点で獲得すると見込んでいる収益の量です。これは、売上予測と同義の予測です。どちらも、会社の健全性と売上高が上昇傾向か下降傾向かを判断するのに役立ちます。中小企業は、さまざまな入力を使用して売上予測を決定します。イニシアチブは通常、営業部門で始まります。売上予測を計算して使用することには、固有の利点があります。
また、外部キーを読み込まないでください。 エンティティはリポジトリに直接アクセスしないでください
私はそれを単数に保ちます。これはおそらくモデルを表現したものです。このようなコレクションは複数形になり、それがテーブルの名前になります。
また、DollarAmountを単にAmountと呼び、UnitAmountをNumberOfUnitsまたは単にUnitsと呼びます。理由:フィールド名は正確で明確な意味を持つ必要があります。ドルは通貨です。 UnitAmountは測定値が矛盾しています。
また、メンバーの名前を変更すると、2つの金額ではなくなります。
このクラスは、上記の4つの列を持つテーブルを表します。
クラスはテーブルを表しません。 テーブルの行を表します。このクラスの1つのインスタンスは、同時にテーブルの複数の行を表すことができません(そうである場合は、クラスの設計が間違っています)。
このクラスのコレクションは、テーブルをより適切に表現するため、次の複数形/単数形の使用法につながります。
IEnumerable<BudgetAmount> BudgetAmounts = new List<BudgetAmount>();
ただし、クラスには2つの金額(ドルと単位)があるため、単数として指定しても意味がないことが指摘されました。
開発者は、1つの行に2つの予算値が含まれていることを理解しています。
ただし、クラスの名前は、エンティティの任意に選択された2つの列だけでなく、エンティティ全体を表す必要があります。
開発者がこのエンティティを「2つの予算値」以外のものと見なすことができない場合、開発者はエンティティが表すもの(機能)がエンティティに含まれるもの(実装)と必ずしも同じではないことを理解していません。
これが事実である場合、開発者にDDDを磨いてもらうのは興味深いかもしれません。コードベースでDDDを使用していなくても、データ(エンティティ)とドメイン(集計)の違いを非常によく理解しており、開発者にはこの視点が欠けていると思います。
テーブルと行の単数/複数の区別は、行の列をリストするよりもはるかに重要です。
これは状況に応じて変更できることに注意してください。テーブルと行の単数/複数の区別は、行の列をリストするよりもはるかに重要ですデータレイヤーで。ただし、予算値をドメインまたはユーザーUI。
それは可能であり、それであなたはその区別をすることができます。しかし、これはレイヤー間の名前の混乱を引き起こす可能性があり、私はそれがそのすべてのトラブルを通過する価値があるとは思わないでしょう。