依存性逆転の原則とは何ですか?C#で実装する方法は?
高レベルのモジュールは、低レベルのモジュールに依存するべきではありません。どちらも抽象化に依存する必要があります。抽象化は詳細に依存するべきではありません。詳細は抽象化に依存する必要があります。この原則は、主にコードモジュール間の依存関係を減らすことに関係しています。
例
依存性逆転の前のコード
using System;
namespace SolidPrinciples.Dependency.Invertion.Before{
public class Email{
public string ToAddress { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public void SendEmail(){
//Send email
}
}
public class SMS{
public string PhoneNumber { get; set; }
public string Message { get; set; }
public void SendSMS(){
//Send sms
}
}
public class Notification{
private Email _email;
private SMS _sms;
public Notification(){
_email = new Email();
_sms = new SMS();
}
public void Send(){
_email.SendEmail();
_sms.SendSMS();
}
}
} 依存性逆転後のコード
using System.Collections.Generic;
namespace SolidPrinciples.Dependency.Invertion.Before{
public interface IMessage{
void SendMessage();
}
public class Email: IMessage{
public string ToAddress { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public void SendMessage(){
//Send email
}
}
public class SMS: IMessage{
public string PhoneNumber { get; set; }
public string Message { get; set; }
public void SendMessage(){
//Send Sms
}
}
public class Notification{
private ICollection<IMessage> _messages;
public Notification(ICollection<IMessage> messages){
this._messages = messages;
}
public void Send(){
foreach (var message in _messages){
message.SendMessage();
}
}
}
} -
「ペイント3D」とは何ですか、またどのように使用されますか?
Windows 10を使用している場合、最近「ペイント3D」と呼ばれる奇妙なアプリがコンピューターに表示されるのを見たことがあるかもしれません。一見すると、Windowsの各バージョンで定番となっているおなじみのWindowsアプリPaintに似ているように聞こえます。しかし、最後の「3D」は何を意味するのでしょうか。これはPaintの改良版ですか、それともまったく別のものですか? ペイント3Dとは Paint 3Dは、MicrosoftがWindows10用に公開した機能の無料バンドルであるCreatorsUpdateを介して提供された可能性があります。この更新には、平均的なユーザーがコン
-
BIOS とは? BIOS の更新方法は?
BIOS とは何か、および BIOS を更新する方法: お使いの PC で、キーボード、電源、またはインターネット接続、PC の速度などのソフトウェアに関連する問題に直面するときはいつでも、ほとんどの場合、問題は何らかの方法で BIOS に関連しています。同じことに関して修理担当者または IT 担当者に相談すると、さらなるトラブルシューティングを行う前に、BIOS を更新するよう提案または指示されます。多くの場合、BIOS を更新するだけで問題が解決するため、それ以上のトラブルシューティングは必要ありません。