我正在尝试改进我的应用程序的设计,因此不是从表示层调用DataAccess层。我将尝试从BusinessObjects图层中的对象实现保存方法。但我不确定如何通过图层传递对象或属性。例如在我以前的设计中,我只是在表示层中创建了一个对象实例并为其分配属性,然后调用DataAccess方法将该信息保存到数据库中,并将对象作为参数传递(如图所示)。为我的对象实现保存方法
DAL
public static void SaveObject(Object obj)
{
int id = obj.id;
string label = obj.label;
}
PL
Object obj = new Object();
obj.id = 1;
obj.label = "test";
DAL.SaveObject(obj);
,但我只是想这样做,我PL
Object obj = new Object();
obj.id = 1;
obj.label = "test";
obj.SaveObject();
那是possi竹叶提取?以及我的DAL如何?
编辑:解释我的要求
我会立足我的代码,现在在我的系统中一个非常重要的目标。
BusinessEntitiesLayer使用BusinessLogic层
namespace BO.Cruises
{
public class Cruise
{
public int ID
{ get; set; }
public string Name
{ get; set; }
public int BrandID
{ get; set; }
public int ClassID
{ get; set; }
public int CountryID
{ get; set; }
public string ProfilePic
{ get; set; }
public bool Hide
{ get; set; }
public string Description
{ get; set; }
public int OfficialRate
{ get; set; }
public string DeckPlanPic
{ get; set; }
public string CabinsLayoutPic
{ get; set; }
public List<Itinerary> Itineraries
{ get; set; }
public List<StatisticFact> Statistics
{ get; set; }
public List<CabinRoomType> RoomTypesQuantities
{ get; set; }
public List<CabinFeature> CabinFeatures
{ get; set; }
public List<CruiseAmenity> Amenities
{ get; set; }
public List<CruiseService> Services
{ get; set; }
public List<CruiseEntertainment> Entertainment
{ get; set; }
public List<CustomerReview> CustomerReviews
{ get; set; }
}
}
BusinessLogicLayer使用DataAccessLayer
其实这层意在验证,然后我的对象调用DAL的方法,但我并没有实现任何验证的权利现在,我只是用它来调用DAL方法。
public static void Save(object cruise)
{
CruisesDAL.Save(cruise);
}
DataAccessLayer尝试引用BussinessEntities,但它给我的循环依赖错误!
它应该接收对象,并从我的项目强制转换为克鲁斯实体
public static void Save(object cruise)
{
Cruise c = cruise as Cruise;
//access the object c properties and save them to the database
}
代码示例:
public static List<Cruise> GetCruisesList()
{
string commandText = "SELECT ID, Name + CASE Hide WHEN 1 Then ' (Hidden)' ELSE '' END AS Name FROM Cruises";
List<Cruise> cruises = new List<Cruise>();
Cruise cruise;
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand command = new SqlCommand(commandText, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
cruise = new Cruise();
cruise.ID = Convert.ToInt32(reader["ID"]);
cruise.Name = reader["Name"].ToString();
cruises.Add(cruise);
}
}
}
}
return cruises;
}
表示层使用BusinessEntities
输入控件(文本框, DropDownList等)
当点击保存按钮时,我将获取所有值,创建一个Cruise对象并调用Cruise。保存();
扩展方法将帮助你 - http://msdn.microsoft.com/en-us/library/bb383977.aspx – rkg