C#で単純なスプレッドシートプログラムを実装しようとすると、次の問題が発生しました。メインクラスのフィールドにアクセスできる独立した静的パーサークラスを設計する
私がしようとしているのは、基本的にクラスCell
のオブジェクトの配列であるTable
クラスを持つことです。しかし私はすべてのユーザ入力を受け入れる別のParser
クラスを実装したいと思います。しかし、Parser
クラスのメソッドは、テーブルのセルにアクセスする必要があります。そして、私はそれがどのように実装されるべきかわかりません。
おそらく、より良いコードによって説明:私はそれを達成するための参照
class Cell
{
//fields
}
class Table
{
private Cell[,] cells;
public Cell At(int key);
}
static class Parser
{
public static Cell GetCellReference(string userInput)
{
//somehow
//return Table.At(parsedUserInput)
}
}
一つの方法は、Parser
内Table
オブジェクトをインスタンス化することですが、それは明らかに、パーサクラス自体の目的に反し。私が見るもう1つの方法は、Table
オブジェクトをParser
のメソッドに渡すことですが、それは1つのTable
インスタンスでのみ動作することが意図されているので妥当ではありません。継承はパーザとテーブルの間には適用されないように見えますので、私は自分自身が詰まっています。 OOPの基本原則に違反することなく目的を達成するために、デザインをどのように変更/修正する必要がありますか?
「インテントは1つのテーブルインスタンスのみで作業することです」。つまり、[Singleton Pattern](https://en.wikipedia.org/wiki/Singleton_pattern)を使用し、 'Table.Instance'のようなインスタンスにアクセスすることを期待しています。それが正しい選択であるかどうかは分からない。それはあなたのシステムに関するより多くの情報を必要とするからだ。 – Vikhram
パーサを表のインスタンスに書き出します。あなた自身のハードワイヤーを1つだけにしてはいけません。後で気をつける必要があるかもしれません(たとえば、スプレッドシートを一度にアクティブにしてください) – pm100
@ pm100そうですね。しかし、確かにインスタンスが1つしかない場合はどうでしょうか? @Vikhramによって提案されているように、私がシングルトンパターンを使用していたら? – zoickx