私はここ 1 年ほど C# を学んでおり、その過程でベスト プラクティスを取り入れようとしています。StackOverflow と他の Web リソースの間で、懸念事項を適切に分離するための正しい軌道に乗っていると思っていましたが、今はいくつかの疑問があり、Web サイト全体をこの新しいものに変換する前に、正しい道を進んでいることを確認したいと考えています。建築。
現在の Web サイトは古い ASP VBscript であり、既存のデータベースは非常に醜い (外部キーなどがない) ため、少なくとも .NET の最初のバージョンでは使用したくなく、現時点で ORM ツールを学習する必要はありません。
UI レイヤーは DTO とビジネス レイヤーのみを表示でき、データ レイヤーはビジネス レイヤーからのみ表示できるように、個別の名前空間とセットアップにある次の項目があります。簡単な例を次に示します。
productDTO.cs
public class ProductDTO
{
public int ProductId { get; set; }
public string Name { get; set; }
public ProductDTO()
{
ProductId = 0;
Name = String.Empty;
}
}
productBLL.cs
public class ProductBLL
{
public ProductDTO GetProductByProductId(int productId)
{
//validate the input
return ProductDAL.GetProductByProductId(productId);
}
public List<ProductDTO> GetAllProducts()
{
return ProductDAL.GetAllProducts();
}
public void Save(ProductDTO dto)
{
ProductDAL.Save(dto);
}
public bool IsValidProductId(int productId)
{
//domain validation stuff here
}
}
productDAL.cs
public class ProductDAL
{
//have some basic methods here to convert sqldatareaders to dtos
public static ProductDTO GetProductByProductId(int productId)
{
ProductDTO dto = new ProductDTO();
//db logic here using common functions
return dto;
}
public static List<ProductDTO> GetAllProducts()
{
List<ProductDTO> dtoList = new List<ProductDTO>();
//db logic here using common functions
return dtoList;
}
public static void Save(ProductDTO dto)
{
//save stuff here
}
}
私の UI では、次のようにします。
ProductBLL productBll = new ProductBLL();
List<ProductDTO> productList = productBll.GetAllProducts();
保存の場合:
ProductDTO dto = new ProductDTO();
dto.ProductId = 5;
dto.Name = "New product name";
productBll.Save(dto);
私は完全に基地から外れていますか?BLL にも同じプロパティを設定し、DTO を UI に戻さないようにする必要がありますか? 何が間違っていて何が正しいのか教えてください。私はまだ専門家ではないことに注意してください。
アーキテクチャにインターフェイスを実装したいのですが、その方法をまだ学んでいます。