数日間、私はこの特定のレッスンについて、マイクロソフトのサイトにある.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 この特定のプロジェクトで新しいインスタンスを作成しないようにするにはどうすればよいですか? ありがとうございます!
はもの "新のりである" ことを無視します。それが反パターンでないときは、通常は過度のものです。必ずしもそうではありませんが、あなたはまだそれについて心配する必要はありません。 –
私はEdに同意します。インターフェイスと悩みの分離をマスターするまでは、IoCや工場のパターン(「新しいものは何か」という記事がすべてです)を把握するのは難しいでしょう。 IoCを実装する前に、よく設計されたクラスとインターフェイスから多くの価値を得ることができます。これらも、前提条件です。複数のクラスが同じインターフェースを使用する特定のユースケースがあるまで、ファクトリパターンの適切な使用を評価することは難しいです。 – AaronLS