Pertanyaan Pola desain untuk beberapa skenario DB


Aplikasi .NET kami perlu terhubung ke 2 database SQL yang berbeda. Beberapa pertanyaan akan dialihkan ke DB ke-1 dan beberapa ke yang kedua. Adakah pola desain khusus untuk mencapai ini. Apakah ada DataAdapter yang dapat beralih saat runtime dari satu DB ke yang lain.


4
2018-04-11 07:28


asal


Jawaban:


Mengenkapsulasi setiap basis data di belakang a Strategi - Ketika datang ke database kami sering cenderung memanggil mereka Repositori. Anda sekarang dapat mengenkapsulasi kedua implementasi di belakang Gabungan yang mengarahkan permintaan.

Bayangkan kita memiliki antarmuka IRepository. Anda dapat mengarahkannya seperti ini:

public class RoutingRepository : IRepository
{
    private readonly IRepository repository1;
    private readonly IRepository repository2;

    public RoutingRepository(IRepository repository1, IRepository repository2)
    {
        if (repository1 == null)
        {
            throw new ArgumentNullException("repository1");
        }
        if (repository2 == null)
        {
            throw new ArgumentNullException("repository2");
        }

        this.repository1 = repository1;
        this.repository2 = repository2;
    }

    public SomeEntity SelectEntity(int id)
    {
        if (this.UseRepository1())
        {
            return this.repository1.SelectEntity(id);
        }
        else
        {
            return this.repository2.SelectEntity(id);
        }
    }

    // more IRepository members can go here...

    private bool UseRepository1()
    {
        // implement routing logic here...
    }
}

Klien hanya akan melihat antarmuka IRepositori, jadi menurut Prinsip Pergantian Liskov, mereka tidak akan pernah tahu bedanya.


6
2018-04-11 08:10