基本的に、ビジネスレイヤー、ビジネスエンティティ、およびデータアクセス(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);
}
}
これを実現する方法の例を次に示します。そのため、レイジー依存関係を与えるためにカスタムコンストラクターを使用できます。
!レイジーを処理する必要があるのは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]
コメントを追加