私はc#で作業しており、同じインターフェイスを使用する2つのクラスを実装しようとしています。どちらのクラスも、それぞれ1つのメソッドのみを必要とします。ただし、2つのメソッドは、異なるパラメーターを使用して、異なるタイプである必要があります。インターフェイスから1つのメソッドを継承し、各クラスでそれを上書きできるようにしたいと思います。これは、すてきできれいなためです(インターフェイスはプログラム機能(依存性注入を使用)に必要です)残念ながら、両方のクラスも必要です。メール送信者クラスは他のプログラムで繰り返し使用されるためです。
私はALMOSTが私の問題に適合する解決策を見つけました、それは次のとおりです:インターフェースからメソッドを実装するが、異なるパラメーターを使用する
私が持っている違いは、2つのクラスのそれぞれが1つのメソッドのみを呼び出す必要があるということです。
これが現状の私のコードです(前のソリューションでジェネリックを実装しようとしました):
interface IEmailSender<T>
{
T DoEmail();
}
public class EmailGenerator : IEmailSender<MailMessage>
{
public override MailMessage DoEmail(string emailAddress)
{
MailMessage message = new MailMessage();
//code to generate email message
return message;
}
}
public class EmailSender : IEmailSender<bool>
{
public override bool DoEmail(MailMessage message)
{
//code to send email
return true;
}
}
理想的には、メール送信者メソッドを無効にしたいのですが、戻り値が必要な場合はブール値を返してもかまいません。
それが理にかなっていることを願って、私は文字通りここできちんとしようとしています。なぜなら、現在それを機能させるには、インターフェイスに2つのメソッドがあり、各クラスが空のメソッドを呼び出す必要があるからです。
前もって感謝します、
アーキテクチャが貧弱なために苦労しているようです。EmailGenerator
ではありませんIEmailSender
。として使用する場合はありませんIEmailSender
。
私はこれをお勧めします:
interface IEmailGenerator{
MailMessage BuildMailMessage(string message)
}
interface IEmailSender
{
void SendEmail(string message);
}
public class EmailGenerator : IEmailGenerator{
public MailMessage BuildMailMessage(string message)
{
return new MailMessage();
}
}
public class EmailSender : IEmailSender
{
private readonly IEmailGenerator _emailGenerator;
public EmailSender (IEmailGenerator emailGenerator){
_emailGenerator = emailGenerator;
}
public void SendEmail(string message)
{
var message = _emailGenerator.BuildMailMessage(message);
//send email
}
}
このようにして、電子メールの送信と電子メールの生成の違い(および懸念事項)を明確に分離しました。DIを使用して、すべてを一緒に配線できます。
class Consumer{
private IEmailSender _emailSender;
Consumer(IEmailSender emailSender){ _emailSender = emailSender;}
void Method()
{
string msg = "Hello Wolrd!"
_emailSender.SendEmail(msg);
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加