幾天以來,我一直在微軟網站的.NET教程中研究和研究這個特殊的課程。 LINK封裝和接口
正如你已經知道每課結束時有一個「功課」。 這一次,我應該升級給定的項目與一些新功能,並實現封裝和接口。
新功能應包括:
客戶有一個屬性暴露自己的歷史訂單
//更新:實施
客戶公開的方法添加訂單
試圖添加空令應該什麼都不做
試圖與現有的訂單號碼添加訂單應該取代現有的訂單(不加一式兩份)
//我成功的唯一的事情是消除先前的「訂單」具有相同的名稱,而不是僅僅替換它。
訂單應該暴露的訂購日期(可讀取/寫入)
試圖在未來的訂購日期添加的順序應該什麼都不做
我沒有管理添加大部分這些功能。目前我的項目(更新):
namespace ConsoleApp2
{
class Program
{
static void Main()
{
Customer customer1 = new Customer("John");
Customer customer2 = new Customer("George");
var customers = new List<Customer>() { customer1, customer2 };
customer1.AddOrder("car", "12/7/1999"); // will be removed due to same name
customer1.AddOrder("vase", "20/6/2024");// will not be added to the list because of the future time
customer1.AddOrder("car", "3/12/2014");
customer1.AddOrder("headphones", "3/12/2022");// will not be added to the list because of the future time
customer2.AddOrder("headphones", "10/3/2002");
customer2.AddOrder("", "");// will not be added to the list due to empty values
//print customers
foreach (var customer in customers)
{
customer.Print();
}
}
}
public class Customer
{
public string Name { get; }
private List<Order> orders = new List<Order>();
private List<Order> ordersHistory = new List<Order>();
public Customer(string name)
{
Name = name;
}
public void AddOrder(string name, string date)
{
if (name == null) { return; }
else if (name == "" || date == "") { return; }
else
{
AddHistoricOrder(name, date);
AddRegularOrder(name, date);
}
}
public void Print()
{
Console.WriteLine(Name);
Console.Write("Orders: ");
orders.ForEach(Console.Write);
Console.WriteLine();
Console.Write("Historic Orders: ");
ordersHistory.ForEach(Console.Write);
Console.WriteLine();
Console.WriteLine($"Order Count: {orders.Count}");
Console.WriteLine();
Console.WriteLine();
}
private void AddRegularOrder(string name, string date)
{
if (DateTime.Parse(date) > DateTime.Now) { return; }
else
{
for (int i = 0; i < orders.Count; i++)
{
if (orders[i].OrderName == name)
{
orders.RemoveAt(i);
}
}
orders.Add(new Order(name, date));
}
}
private void AddHistoricOrder(string name, string date)
{
ordersHistory.Add(new Order(name, date));
}
public override string ToString()
{
return $"{Name}";
}
}
public class Order
{
public string OrderName { get; }
public DateTime OrderDate { get; set; }
public Order(string orderName, string date)
{
OrderName = orderName;
OrderDate = DateTime.Parse(date);;
}
public override string ToString()
{
return $"{OrderName} ({OrderDate.ToShortDateString()}), ";
}
}
}
即使壽我搜索並觀看封裝和接口,我仍然不知道我應該如何實現那些在這裏的各種視頻。 你能幫我讓我的代碼更高效嗎?
我沒有落實暴露歷史訂單的屬性(我只是不知道什麼是應該做的)
而且我真的不明白所謂的教訓的一部分「是新膠」,這我們應該避免在代碼中添加新的關鍵字,並展示一些使用接口的例子。我沒有找到給定的LINK 以外的任何信息我如何避免在此特定項目中創建新實例? 在此先感謝!
忽略的是 「新的膠水」 的東西。當它不是反模式時,通常是矯枉過正的。並不總是,但你現在不需要擔心它。 –
我同意愛德。在你掌握了接口和關注點分離之前,很難掌握IoC或工廠模式(這是「新膠」的文章是什麼)。你從設計良好的類和接口中獲得更多價值,而且在實現IoC之前,這些也是一個先決條件。在您有多個類使用相同接口的特定用例之前,您很難評估正確使用工廠模式。 – AaronLS