BLとBEの間の遅延読み込み時の循環依存

クレメント

基本的に、ビジネスレイヤー、ビジネスエンティティ、およびデータアクセス(SQL)レイヤーがあります。

ビジネスエンティティ層は、ビジネス層とデータアクセス層によって参照されます。

ビジネス層からエンティティ層にエンティティを埋める関数を呼び出すものに遅延読み込みを設定するテストを行いました。

問題:循環依存!BEはBLで使用されているため、BEからBLを呼び出すことができません。

興味深いコードは次のとおりです。

エンティティのプロパティ:

 // Not lazyloaded properties
        public int Id { get; set; }
        public string Description { get; set; }

        // lazy loaded properties
        private Lazy<AuditTypeEntity> _auditType = null;
        public AuditTypeEntity auditType
        {
            get
            {
                return _auditType.Value;
            }
        }

私が作成したエンティティコンストラクター(ただし、循環冗長性があるため使用できません:BLはBEを呼び出すため、BEはBLを呼び出すことができます):

public MyEntity()
        {
        _auditType = new Lazy<AuditTypeEntity>(() => BusinessLayer.GetAuditTypeById(_auditTypeId).Value);
}

編集:

ADO.NETを使用していて、エンティティオブジェクトを埋めています。

これは、DALレイヤーを呼び出す方法の例です。

public static IList<Nature> GetAllNature()
        {
            using (DAOManager daomanager = DAOFactory.CreateDaoManager(DataSource.DB_Belval))
            {
                return daomanager.GetNatureDAO().GetAll(BE.EnumEntity.NATURE.ANOMALY);
            }
        }
user3608494

これを実現する方法の例を次に示します。そのため、レイジー依存関係を与えるためにカスタムコンストラクターを使用できます。

レイジーを処理する必要があるのはDALだけです。

class Program
{
    static void Main(string[] args)
    {
        var bll = new BLL();
        var person = bll.GetPerson();
        var orders = person.Orders; // GetOrders in DAL will be excuted here
    }
}

// BLL project
public class BLL
{
    public Person GetPerson()
    {
        return new DAL().GetPerson(1);
    }
}

// Entity Project
public class Person
{
    public Person()
    {

    }
    public Person(Lazy<IEnumerable<Order>> orders)
    {
        _orders = orders;
    }
    public int Id { get; set; }
    public string Name { get; set; }
    private Lazy<IEnumerable<Order>> _orders = null;

    public IEnumerable<Order> Orders
    {
        get { return _orders?.Value; }
        set { _orders = new Lazy<IEnumerable<Order>>(() => value); }
    }

}

public class Order
{
    public int Id { get; set; }
    public string Name { get; set; }
}

// DAL Project
public class DAL
{
    public Person GetPerson(int id)
    {
        var person = new Person(new Lazy<IEnumerable<Order>>(() => GetOrders(id))) // Init lazy
        {
            Id = id,
            Name = "Person"
        };
        return person;
    }

    public IEnumerable<Order> GetOrders(int personId)
    {
        return new List<Order> { new Order { Id = 2, Name = "Order" } };
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

js関数の読み込みの時間遅延

分類Dev

遅延読み込み時の<picture>要素の幅と高さ

分類Dev

要素jQueryの読み込みの遅延

分類Dev

iframeの読み込みの遅延

分類Dev

Flutter ListViewの遅延読み込み

分類Dev

uicollectionviewでの遅延読み込み

分類Dev

画像要素の遅延読み込み

分類Dev

Pythonの遅延読み込み

分類Dev

既存のMODX遅延読み込み

分類Dev

遅延読み込みの実装

分類Dev

修正:SeleniumPythonでの遅延読み込み

分類Dev

DLLの遅延読み込み

分類Dev

QueryDSLでの遅延読み込み

分類Dev

PowerShellでの遅延読み込み?

分類Dev

遅延読み込みの例?

分類Dev

Firebase の遅延読み込み

分類Dev

Hibernate4とJPA + Spring使用時の遅延読み込みに関する改善

分類Dev

Hibernateでの動的な熱心な読み込みと遅延読み込み

分類Dev

仮想を使用した遅延読み込み時のEFObjectDisposedException

分類Dev

読み込みプロパティの遅延読み込み

分類Dev

DataTablesの読み込みとレンダリングの遅延

分類Dev

SafariとWkwebviewでの遅延読み込みの問題

分類Dev

Pythonでの時系列の時間遅延埋め込み

分類Dev

JPA:EntityManagerのget-use-closeと遅延読み込み

分類Dev

Hibernate OneToOneの遅延読み込みとカスケード

分類Dev

遅延読み込みの例外を伴うWildflyとMybatis

分類Dev

Angular2とWebpackの遅延読み込み

分類Dev

遅延読み込みとHibernate.initialize();の問題。

分類Dev

LinuxのI2Cでの書き込みと読み取りの間の遅延の計算

Related 関連記事

ホットタグ

アーカイブ