アプリ版:「スタンプのみでお礼する」機能のリリースについて

 こんにちは。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、「その他」

 のいずれが好ましいでしょうか? 皆さんのご意見を伺わせてください。

A 回答 (1件)

質問者様が決めた仕様に対して質問されても、


解決できるのは仕様を決めた質問者だけです

A、Undo という概念があって、 Redo という概念があって、それぞれ概念が違うと思われるのであれば2つに分ければよいと思うし
B、基本的な操作のログ(記録)があって Undo とRedo とは単に操作ログの内容を移動する方向的なものでしか無いという概念なら1つになります
C、Aと同じ
D、興味が無ければレスは付きません
E、作ったプログラムを見直すと無駄な部分というのは出てくるものです、
  それは何かを読めば解決できるものではないです、
Z、重要なのは、
  ここまで作ったけど無駄なロジックだから作り直すか
  それとも、作り直す事は時間も労力も費やす事となり、それなら今のを完成させて作りなおす時間分、
  動作検証して完成度を上げた方が良いと判断するかです
  普通は作成している物が、趣味なら自分のスキルを上げる為に前者を、仕事なら後者を選びます
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。結局、仕様を決めた人が(常識の範囲内で)勝手に決めればいいということですね。

 質問した後にいくつかサンプルコードを読みましたが、メソッド名以外区別がないのがほとんどでした。
 が、それでやってみると、(初心者名せいでしょうか?)おかしな代入が(UndoのスタックにRedo入れてみたり)がところどころに出てしまったので、何となくCのままにすることにしました。

 今のところは趣味なので不具合があったら改良します。

 ありがとうございました。

お礼日時:2012/07/05 18:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!