注
コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。
クラスとそのメソッドには、単一の責任が必要です。 最終的な変更に対する回復力のあるクラスを設計するには、次の点に注意してください。 クラスに必要なもの:
明確な目的
適切な名前 (クラス名およびメソッド名)
拡張する必要があるメソッドのみが拡張のために公開されます。つまり、重要なルールは、必要なだけ拡張を許可することです。
- すべてのパブリックおよび保護メソッドが X++ における拡張性ポイントとなります。 新しいメソッドが導入されるたびに、ダウンストリーム コンシューマーは、メソッドに他のロジックを挿入する新しい方法を取得します。
例
拡張不可コード
void calculatePrice(SalesLine _saleLine, AmountMST _amount)
{
// cannot add extra condition if needed
if(_saleLine.QtyOrdered > 0 && _saleLine.SalesType == SalesType::Sales)
{
ttsbegin;
// calculation of SalesPrice is locked and cannot be extended
_saleLine.SalesPrice = _saleLine.QtyOrdered * _amount;
_saleLine.update();
ttscommit;
}
}
拡張可能コード
protected boolean canUpdateSalesPrice(SalesLine _saleLine)
{
return (_saleLine.QtyOrdered > 0 &&
_saleLine.SalesType == SalesType::Sales);
}
protected SalesPrice calculateSalesPrice(
SalesLine _saleLine, AmountMST _amount)
{
return _saleLine.QtyOrdered * _amount;
}
public void updateSalesPrice(SalesLine _saleLine, AmountMST _amount)
{
// extra condition can be added in CoC on the method
if(this.canUpdateSalesPrice(_saleLine))
{
ttsbegin;
// extra calculation/value can be added in CoC on the method
_saleLine.SalesPrice = this.calculateSalesPrice(_saleLine, _amount);
_saleLine.update();
ttscommit;
}
}
クラス階層
出荷時のパターンを使用できる新規または既存のクラス階層の場合、SysExtension フレームワークにより簡単に拡張可能になります。 これらの拡張は完全に切り離されるため、基本クラスに変更を加えなくても新しいサブクラスを追加することができます。 したがってより少ないコードが必要です。 さらに、コンストラクトのコントラクトは変わらないため、パブリック アプリケーション プログラミング インターフェイス (API) に変更はありません。 したがって、リファクタリングは低リスクです。
いくつかの既存のファクトリ メソッドは、インスタンス コンストラクターを使用してサブクラスをインスタンス化しない可能性があります。 代わりに、コンストラクトなどの静的コンストラクターを呼び出すことができます。 これらのファクトリ メソッドに SysExtension フレームワークが使用される場合、重大な変更が発生します。サブクラスの静的コンストラクターが呼び出されなくなるためです。 このような場合は、既定のケースにのみ SysExtension フレームワークを使用します。
クラス階層構造の詳細については、次のブログ記事を参照してください。
- SysExtension フレームワーク – 救援に来る
- Dynamics 365 for Finance and Operations における拡張マインドセットの採用 #2 - SysExtension フレームワーク
非推奨
クラスまたはパブリックまたは保護メソッドが不要になった場合、必ずまず警告を使用し、メソッドが廃止されたことをユーザーに通知します。 次に、すべてのユーザーは、変更または新しい API を取り込むことができ、メソッドを廃止できます。 クラスおよびメソッドの廃止 (または、それ以外の場合はクラス メンバーの削除) は、大きな変更点です。 詳細については、重大な変更を参照してください。