こんにちは。c#初心者です。
Undo/Redo機能を実装しようとしていて気になることがあったので質問です。
最初はよくわからなかったので、とりあえず何も見ずに、思いつきでIUndoer, IRedoerを用意してポリモーフィズム全開でやろうとしていました(ちゃんと何か読めよ)。
public interface IUndoer
{
/// <summary>1つ前の状態に戻し、Redoerを生成します。</summary>
/// <returns>Redoer</returns>
IRedoer Undo();
}
public interface IRedoer
{
/// <summary>1つ次の状態に戻し、Undoerを生成します。</summary>
/// <returns>Undoer</returns>
IUndoer Redo();
}
class TextChangeUndoer : IUndoer { // 略 }
class TextChangeRedoer : IRedoer { // 略 }
class PointChangeUndoer : IUndoer { // 略 }
class PointChangeRedoer : IRedoer { // 略 }
・
・
こんな感じで、とりあえずStack<T>に放り込んでやる予定でした。が、途中でよく考えてみれば、対応するUndoerとRedoerは中身が同じだったことに気づきました(遅っ)。
という訳で、上のクラスたちは
class TextChanger : IUndoer, IRedoer { // 略 }
class PointChanger : IUndoer, IRedoer { // 略 }
・
・
こんな感じになりました。ここでクエスチョンです。
一旦は1つにまとめましたが、
A、「UndoとRedoで概念が違うため、元通りに2つのクラスに分けるべき」
B、「そもそもIUndoerとか、IRedoerとか分ける必要がない(端的に言えばIUnRedoerみたいなのでいい)」
C、「今のが良い」
D、「興味ないね」
E、「その前に何か読め」
Z、「その他」
のいずれが好ましいでしょうか? 皆さんのご意見を伺わせてください。
No.1ベストアンサー
- 回答日時:
質問者様が決めた仕様に対して質問されても、
解決できるのは仕様を決めた質問者だけです
A、Undo という概念があって、 Redo という概念があって、それぞれ概念が違うと思われるのであれば2つに分ければよいと思うし
B、基本的な操作のログ(記録)があって Undo とRedo とは単に操作ログの内容を移動する方向的なものでしか無いという概念なら1つになります
C、Aと同じ
D、興味が無ければレスは付きません
E、作ったプログラムを見直すと無駄な部分というのは出てくるものです、
それは何かを読めば解決できるものではないです、
Z、重要なのは、
ここまで作ったけど無駄なロジックだから作り直すか
それとも、作り直す事は時間も労力も費やす事となり、それなら今のを完成させて作りなおす時間分、
動作検証して完成度を上げた方が良いと判断するかです
普通は作成している物が、趣味なら自分のスキルを上げる為に前者を、仕事なら後者を選びます
回答ありがとうございます。結局、仕様を決めた人が(常識の範囲内で)勝手に決めればいいということですね。
質問した後にいくつかサンプルコードを読みましたが、メソッド名以外区別がないのがほとんどでした。
が、それでやってみると、(初心者名せいでしょうか?)おかしな代入が(UndoのスタックにRedo入れてみたり)がところどころに出てしまったので、何となくCのままにすることにしました。
今のところは趣味なので不具合があったら改良します。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- Java java final 1 2022/06/10 22:49
- 英語 Think back to the last time you gave a little pres 3 2023/01/29 23:50
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- HTML・CSS HTML、cssのatomつぅーやつで 課題Ex1ってやつを表示させたいのですが、 私は課題Ex1が 2 2022/12/15 16:56
- C言語・C++・C# public class Emplo : IComparable<Emplo>の<Emplo>の意味 2 2023/04/23 23:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラス間でのデータ参照
-
c++,ある関数のクラスから別の...
-
C# log4netの使い方
-
構造 他のクラスの構造体を別...
-
無名パッケージからのインポート
-
Java
-
JTableのイベント取得方法
-
親クラスから子クラスへアクセス。
-
javaでメインクラスが見つから...
-
関数内の変数に<summary>コメン...
-
java-別クラスの変数の使い方を...
-
Genericsの型パラメータ
-
C#にて別クラスの関数を使いたい
-
C#でほかのファイルにある自作...
-
ClassLoader.getSystemResource...
-
import と extends について
-
外部からメンバ変数の中身を取...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
「タイプ初期化子が例外をスロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
C#にて別クラスの関数を使いたい
-
c++,ある関数のクラスから別の...
-
親クラスから子クラスへアクセス。
-
C#でほかのファイルにある自作...
-
クラス間でのデータ参照
-
構造 他のクラスの構造体を別...
-
範囲外の数値を代入したらエラ...
-
ひとつのファイルにクラスは1つ?
-
C++でfriendクラスにしているの...
-
Java リフレクションについて
-
継承したクラス側のクラス名の取得
-
C# インターフェイスの実装
-
java-別クラスの変数の使い方を...
-
C#のクラスライブラリでメッセ...
-
visual studioのデザイナ画面で...
-
C# log4netの使い方
-
a href="..." とServlet
-
アップキャスト、ダウンキャス...
-
オブジェクトのデータをもとにX...
おすすめ情報