リポジトリパターンは素晴らしいリポジトリパターンに慣れる
17336 ワード
リポジトリパターンはコンピューターサイエンスの大部分のように別の抽象化です.それは多くの異なる言語で適用できるパターンです.実際、多くの開発者はリポジトリパターンを使用し、それを実現しない.
この投稿ではコードを変換します.データベースから1つのレコードを読み込み中のコードから始めます.レコードが取得されると、呼び出し元に返されます.いくつかのコードを見てみましょう.
ニーズ改善
我々のデータベースの読み込み中のレコードは
しかし、我々はまた、別のデータベースから会社をロードする方法を必要とする新しい要件を持っています.それで、我々は新しいメソッドを加えて、延長する必要があります
我々は、我々のコードを複製しました 我々のロジックは、人々と企業がどのように格納されるかを知っています. これらのすべてに加えて、どのようにテストするのですか
リポジトリパターンの実装
リポジトリパターンは、データアクセスの上部に抽象レイヤを追加します.
抽象化の少しは長い道のりを行く.リポジトリパターンを使用すると、人々と企業のデータベースにアクセスするための抽象化の薄い層を追加することができます.Then
我々の創造によって始めましょう
リポジトリインターフェイスは再利用可能です.彼らは、ものを変えることなく、他の論理層で使われることができました. テストは非常に簡単です.我々は我々のロジックをテストすることに集中できるようにインターフェイスの応答を模擬. 人々と企業のためのデータベースアクセスコードは1つの場所で集中管理されます. 最適化は、リポジトリレベルで行うことができます.インタフェースは定義され、同意される.リポジトリに取り組んでいる開発者は、彼女がどのように合うかについて、データを保存することができます. リポジトリのパターンは、私たちのデータの素晴らしい抽象化を提供します.これは様々な言語に適用できる.物語のモラルは、データアクセスが単一の責任インターフェースでなければならないということです.このインターフェイスは、追加のロジックを追加するビジネス層に注入することができます.
アマゾンのWebサービスを学ぶ空腹?
アマゾンのWebサービスを学ぶために空腹である多くの人々がいます.この事実に触発されて、私はそれを使用してAmazon Webサービスを学ぶことに焦点を当てコースを作成しました.静的なウェブサイトをホストして、確保して、届ける問題に集中します.あなたはS 3、APIゲートウェイ、Cloudfront、ラムダ、およびWAFのようなサービスを問題に解決策を構築することを学ぶ.
AWS周辺の情報海がある.それは簡単に取得し、学習の進捗状況を作るのは簡単です.この問題を通じて、我々は情報をカットし、あなたの学習をスピードアップすることができます.この本とビデオコースの私の目標は、私があなたと学んだことを共有することです.
面白いですか?着陸ページをチェックし、あなたのために働くパッケージを選択してください.here .
この投稿ではコードを変換します.データベースから1つのレコードを読み込み中のコードから始めます.レコードが取得されると、呼び出し元に返されます.いくつかのコードを見てみましょう.
ニーズ改善
我々のデータベースの読み込み中のレコードは
PersonModel
.public class PersonModel
{
public string Name { get; set; }
public int Age { get; set; }
}
データベースから人をロードするサービスはICompanyLogic
. それは以下のメソッド定義から成ります.public interface ICompanyLogic
{
PersonModel GetPersonByName(string name);
}
の実装ICompanyLogic
はCompanyLogic
.public class CompanyLogic: ICompanyLogic
{
private IPersonDataContext _personDataContext;
public PersonService(IPersonDataContext personDataContext)
{
_personDataContext= personDataContext;
}
public PersonModel GetPersonByName(string name)
{
using(var ctx = _personDataContext.NewContext())
{
var person = ctx.People.First(p => p.Name.Equals(name));
return person;
}
}
}
これまでのところ、これはそんなに悪くない.ビジネスサービスがあるCompanyLogic
これは、データベースから単一の人を取得することができます.しかし、我々はまた、別のデータベースから会社をロードする方法を必要とする新しい要件を持っています.それで、我々は新しいメソッドを加えて、延長する必要があります
CompanyLogic
.CompanyModel
companyデータベースに格納されているモデルを表します.public class CompanyModel
{
public string Name { get; set; }
public int Size { get; set; }
public bool Public { get; set; }
}
拡張するCompanyLogic
名前で会社を返すメソッドを持つこと.public class CompanyLogic: ICompanyLogic
{
private IPersonDataContext _personDataContext;
private ICompanyDataContext _companyDataContext;
public PersonService(IPersonDataContext personDataContext,
ICompanyDataContext companyDataContext)
{
_personDataContext= personDataContext;
_companyDataContext = companyDataContext;
}
public PersonModel GetPersonByName(string name)
{
using(var ctx = _personDataContext.NewContext())
{
var person = ctx.People.First(p => p.Name.Equals(name));
return person;
}
}
public CompanyModel GetCompanyByName(string companyName)
{
using(var ctx = _companyDataContext.NewContext())
{
var person = ctx.Company.First(c => c.Name.Equals(companyName));
return person;
}
}
}
今、私たちは、この初期の解決に関する問題を見始めています.ここでは理想的ではないものの短いリストです.CompanyLogic
, つの異なるデータベースにアクセスする方法を知っている.using
文.GetPersonByName
and GetCompanyByName
すべてをもたらすことなく再利用できないCompanyLogic
. CompanyLogic
現在の状態で?私たちは、人々と企業のためにデータ文脈を偽造しなければなりません.これは可能です.しかし、我々のハードワークは、我々の論理をテストすることになっていなければなりません.リポジトリパターンの実装
リポジトリパターンは、データアクセスの上部に抽象レイヤを追加します.
抽象化の少しは長い道のりを行く.リポジトリパターンを使用すると、人々と企業のデータベースにアクセスするための抽象化の薄い層を追加することができます.Then
CompanyLogic
またはその他のロジックは、これらの抽象化を活用することができます.我々の創造によって始めましょう
IPersonRepository
インタフェースとその実装public interface IPersonRepository
{
PersonModel GetPersonByName(string name);
}
public class PersonRepository: IPersonRepository
{
private IPersonDataContext _personDataContext;
public PersonRepository(IPersonDataContext personDataContext)
{
_personDataContext= personDataContext;
}
public PersonModel GetPersonByName(string name)
{
using(var ctx = _personDataContext.NewContext())
{
return ctx.People.First(p => p.Name.Equals(name));
}
}
}
それから、我々は会社のために非常に類似した何かをすることができます.私たちはICompanyRepository
インタフェースとその実装public interface ICompanyRepository
{
PersonModel GetCompanyByName(string name);
}
public class CompanyRepository: ICompanyRepository
{
private ICompanyDataContext _companyDataContext;
public CompanyRepository(ICompanyDataContextcompanyDataContext)
{
_companyDataContext= personDataContext;
}
public CompanyModel GetCompanyByName(string name)
{
using(var ctx = _companyDataContext.NewContext())
{
return ctx.Company.First(p => p.Name.Equals(name));
}
}
}
現在、2つの別々のリポジトリがあります.PersonRepository
人データベースから名前で与えられた人を読み込む方法を知っています.CompanyRepository
会社のデータベースから会社名を読み込むことができます.さあ、リファクタCompanyLogic
データコンテキストの代わりにこれらのリポジトリを活用するには.public class CompanyLogic: ICompanyLogic
{
private IPersonRepository _personRepo;
private ICompanyRepository _companyRepo;
public PersonService(IPersonRepository personRepo,
ICompanyRepository companyRepo)
{
_personRepo= personRepo;
_companyRepo= companyRepo;
}
public PersonModel GetPersonByName(string name)
{
return _personRepo.GetPersonByName(name);
}
public CompanyModel GetCompanyByName(string companyName)
{
return _companyRepo.GetCompanyByName(companyName);
}
}
それを見て、論理層はもはやデータベースについて何も知りません.私たちは、人と会社がどのように積み込まれているかを抽象化しました.それで、我々は利益を得ましたか?アマゾンのWebサービスを学ぶ空腹?
アマゾンのWebサービスを学ぶために空腹である多くの人々がいます.この事実に触発されて、私はそれを使用してAmazon Webサービスを学ぶことに焦点を当てコースを作成しました.静的なウェブサイトをホストして、確保して、届ける問題に集中します.あなたはS 3、APIゲートウェイ、Cloudfront、ラムダ、およびWAFのようなサービスを問題に解決策を構築することを学ぶ.
AWS周辺の情報海がある.それは簡単に取得し、学習の進捗状況を作るのは簡単です.この問題を通じて、我々は情報をカットし、あなたの学習をスピードアップすることができます.この本とビデオコースの私の目標は、私があなたと学んだことを共有することです.
面白いですか?着陸ページをチェックし、あなたのために働くパッケージを選択してください.here .
Reference
この問題について(リポジトリパターンは素晴らしいリポジトリパターンに慣れる), 我々は、より多くの情報をここで見つけました https://dev.to/kylegalbraith/getting-familiar-with-the-awesome-repository-pattern--1ao3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol