質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

2回答

1170閲覧

Classをリファクタリングしたい

meshkit

総合スコア72

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/12/19 01:34

編集2022/01/12 10:55

###前提・実現したいこと
Classの作り方に関して質問です。
既存のプロジェクトをリファクタリングして、MVC(orMVVM)に沿ってClassを作りたいです。
既存のプロジェクトは、データを読み込み、処理して、ファイルに保存しています。
担当のプログラマーはわたしひとりです。
作成した既存のプログラマーは現在はいません。

該当のプロジェクトはプロトタイプで、扱うデータはほぼ完全に新規、モードも全面的に変更です。
IsDemo(デモ)は、プロトタイプ用のモードなので削除するなど、全面的に変更が必要です。
それなら、極力MVC的に変更するとよいかと思います。

どのように書き換えるのも自由です。
現在このようになっています。

Models\DataManager.cs(1ファイル 320行) namespace Project.Models { public static class DataManager { // 商品 public static List<ProductModel> ProductModels { get; set; } // デモモード public static bool IsDEMO { get; set; } // リカバリーモード public static bool IsRecovery { get; set; } /// <summary> /// 履歴の保存処理 /// </summary> public static void WriteHistory() { } /// <summary> /// 履歴の読み込み処理 /// </summary> public static void ReadHistory() { } } public class ProductModel { // 商品コード public int ProductNumber { get; set; } // 商品名 public string ProductName { get; set; } // 価格 public int Price { get; set; } } }

これを、
商品とモードで別のModelにする、フィールドとプロパティはModel、メソッドはControllerにするという観点で、次のように書き換えようと考えています。
この方針、ご意見をお聞かせください。

Models\ProductsModel.cs namespace Project.Models { public static class ProductsModel { // 商品 public static List<ProductModel> ProductModels { get; set; } } } Models\ProductModel.cs namespace Project.Models { public class ProductModel { // 商品コード public int ProductNumber { get; set; } // 商品名 public string ProductName { get; set; } // 価格 public int Price { get; set; } } } Controller\ProductsController.cs namespace Project.Controller { public class ProductsController { /// <summary> /// 履歴の保存処理 /// </summary> public static void WriteHistory() { } /// <summary> /// 履歴の読み込み処理 /// </summary> public static void ReadHistory() { } } } Models\ModeModel.cs namespace Project.Models { public class ModeModel { // 標準モード public static bool IsNormal { get; set; } // デモモード public static bool IsDEMO { get; set; } // リカバリーモード public static bool IsRecovery { get; set; } } }

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2015 Pro
Windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/19 02:14

何を作っているのですか? WPF? ASP.NET MVC? その他?
guest

回答2

0

なんでstaticを連発しているの?
IOCコンテナ(DIコンテナ)を使おう。

staticは、テスト的に良くないよ。

あと、

フィールドとプロパティはModel、メソッドはControllerにするという観点

MVCを勘違いしている感じ。
Save周りのメソッドは、Model側にも必要ですよ。
実際、叩くのは、Controller側ですが。

Controllerの役目は、指揮者で、実際のファイルに書くとかのこまごまとしたコードは、Model側。
まぁ、Model自体も、何かのBaseClassから継承して、そういうコードを書かなくていいようにすべきですが。

投稿2017/12/19 05:53

kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meshkit

2017/12/19 06:05

ありがとうございます。 static 連発は元のコードがそうなっているだけです。IOCコンテナ調べてみます。 やっぱりMVCわかってなかったですか。SaveとかはModel側に書くのですか。なるほど。
guest

0

メリットがあって暇があるなら好きにしたらいいと思います。
動作実績のあるものを大幅に変更するだけのメリットがあるんですよね?

追記

このように書きましたが、質問履歴を見て思い直しました。
余計なことはしない方がいいと思います。
せっかくちゃんと動いているものが動かなくなってみんなが困ります。

投稿2017/12/19 02:12

編集2018/01/05 04:12
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meshkit

2018/01/05 06:41

ありがとうございます。 冷たいなー、と感じていました。 とはいえ、結局システム全体が全面的に変更になり、全面的に変更しました。 おっしゃるとおり、動いているものを動かなくしたいわけではないですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問