Ticket #909 (new 改善提案)

Opened 10 years ago

Last modified 9 years ago

モデルクラス

Reported by: ghana Owned by: somebody
Priority: Milestone: バックログ
Component: その他 Version: 2.5-dev
Keywords: Cc:
修正済み: no

Description

[comu-ml:156] EC-CUBE 2.5 dev オブジェクトとモデルとDBの関係について に関連してモデルクラスを作成してみたました。(添付)

class SC_Customer extends SC_Model 

    var $select_key     = 'customer_id';
    var $select_table   = 'dtb_customer';
    var $arrRegistColumn = array(
        array("name" => "ログインID", "column" => "login_id", "convert" => "n", "db" => "dtb_customer", "length" => null, "check" => array("EXIST_CHECK", "GRAPH_CHECK")),
        array("name" => "パスワード", "column" => "password", "convert" => "a", "db" => "dtb_customer", "length" => null, "check" => array())
        array("name" => "名(姓)", "column" => "name01", "convert" => "aKV", "db" => "dtb_customer", "length" => STEXT_LEN, "check" => array("EXIST_CHECK", "MAX_LENGTH_CHECK")),
    );

}

$this->objCustomer = new SC_Customer();

とすれば

CRUD や

$this->objCustomer >regist($this->arrForm);
$this->objCustomer >update($this->arrForm);
$this->objCustomer >delete($this->arrForm); (del_flg 方式)

$this->objCustomer >getData($this->arrForm[customer_'id']);
$this->objCustomer >getList($search_condition, $page_max, $offset); ($search_condition の実装は SC_Customer 内の setWhere で)

変数のコンバートとエラーチェック

$this->objCustomer >convertParam($this->arrForm);
$this->objCustomer >errorCheck();

が出来ます。 まだ簡単なものですがフォームの定義の使いまわしが簡単に行え 既存のオブジェクト等にも導入できます。

統一的に使えばかなりコードの 見通しがよくなると思うのですがどうでしょうか。

Attachments

SC_Model.php Download (5.7 KB) - added by ghana 10 years ago.
モデルクラス

Change History

Changed 10 years ago by ghana

モデルクラス

comment:1 Changed 10 years ago by nanasess

#555 で, 似たような提案をしましたが, 変化が大きすぎて受け入れづらいようです.

個人的には, ビジネスロジックを何でもかんでも, Model クラスに詰め込むのではなく,

  • テーブルの行にあたるデータは Entity
  • DBアクセスするのは Dao
  • 機能ごとの共通処理は Service
  • 入力チェックは Validator
  • それ以外の業務ロジックは Helper

といった感じに分離させたいですね.

複雑な構造のデータを, すべて連想配列で扱っているのもコードの見通しが悪くなっている一因だと思います.

comment:2 follow-up: ↓ 3 Changed 10 years ago by ghana

試みに管理画面の商品管理部分これで実装してみたいのですがどうでしょう? 既存の SC_Product を SC_Model を継承するようにするだけです。 SC_Product の元のコードやメソッドはいじらないので。

comment:3 in reply to: ↑ 2 Changed 10 years ago by Seasoft

2.11 系は、初回ベータリリースを完了しましたので、2.11.0 への実装は難しいと思います。一旦サイドボックスで実装して、開発者間でレビューするのが良いのではないでしょうか?

とりあえず、ghana 様が提案されているように1画面に適用して、さらに新しいモデルに基づいた理想的な実装へ組みなおして、開発メンバーへ提案していくのが良いように感じます。

comment:4 Changed 10 years ago by nanasess

仮に SC_Product へ適用するとしても, 商品関連の数個のテーブルを複雑に結合させる必要があり, このままのコードでは難しい気がします.

comment:5 follow-up: ↓ 6 Changed 10 years ago by ghana

SC_Product に実装したものがあるので (実装は既存 SC_product のメソッドを呼んでいます) なにかソースの見れる環境で観てもらうのが現実的ですね

公式のサンドボックスってありましたっけ? なければ GitHub? か何かで良いでしょうか。

comment:6 in reply to: ↑ 5 Changed 10 years ago by Seasoft

ghana への返信

公式のサンドボックスってありましたっけ? なければ GitHub? か何かで良いでしょうか。

はい。昨年、ロックオンさんに作っていただきました。

Date: Tue, 28 Sep 2010 16:55:02 +0900
Message-ID: <JxqdvOz4cr9SpiitscxZ8SEw12a@lockon.co.jp>
From: ロックオン 梶原 <Naoki_Kajiwara@lockon.co.jp>
To: comu-ml@ec-cube.net
Subject: [comu-ml:136] EC-CUBE2.5のサンドボックスについて

ただ、かなり以前のソース状態なので、ごっそり入れ替えが必要だと思いますが。

comment:7 Changed 10 years ago by nanasess

  • Milestone set to EC-CUBE2.12.0(仮)

comment:8 Changed 9 years ago by h_yoshimoto

  • 修正済み unset
  • Milestone changed from EC-CUBE2.12.0alpha to バックログ

ひとまずバックログへ移動させていただきます。

Note: See TracTickets for help on using tickets.