非常に異なるものを表すクラスで頻繁に使用する機能がある場合、私の経験では、いくつかのカテゴリに分類する必要があります。
- ユーティリティ (文字列の書式設定、解析など)
- 分野横断的な懸念事項 (ロギング、セキュリティの実施など)
ユーティリティ タイプの機能については、別のクラスを作成し、必要に応じてビジネス クラスでユーティリティ クラスを参照することを検討する必要があります。
public class Validator
{
public bool IsValidName(string name);
}
class Patient
{
private Validator validator = new Validator();
public string FirstName
{
set
{
if (validator.IsValidName(value)) ... else ...
}
}
}
ロギングやセキュリティなどの分野横断的な問題については、Aspect-Oriented Programmingを調査することをお勧めします。
他のコメントで説明されている PrintA と PrintB の例に関しては、Factory パターンの優れたケースのように思えます。IPrint を実装するクラス PrintA と PrintB などのインターフェイスを定義し、特定のページのニーズに基づいて IPrint のインスタンスを割り当てます。
// Simplified example to explain:
public interface IPrint
{
public void Print(string);
}
public class PrintA : IPrint
{
public void Print(string input)
{ ... format as desired for A ... }
}
public class PrintB : IPrint
{
public void Print(string input)
{ ... format as desired for B ... }
}
class MyPage
{
IPrint printer;
public class MyPage(bool usePrintA)
{
if (usePrintA) printer = new PrintA(); else printer = new PrintB();
}
public PrintThePage()
{
printer.Print(thePageText);
}
}