Я пытаюсь улучшить дизайн моего приложения, поэтому вместо вызова уровня 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();
Это возможно? и как будет выглядеть мой DAL?
Редактировать: Объяснять мои требования
Я сейчас основываю свой код на очень важном объекте в моей системе.
BusinessEntitiesLayer использует BusinessLogic Layer
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;
}
PresentationLayer использует BusinessEntities
Элементы управления вводом (TextBoxes, DropDownList и т. Д.)
Когда нажимается кнопка сохранения, я беру все значения, создаю объект Cruise и вызываю Cruise.Save ();