Ticket #909 (new 改善提案)
モデルクラス
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
Change History
Changed 10 years ago by ghana
-
attachment
SC_Model.php
added
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のサンドボックスについて
ただ、かなり以前のソース状態なので、ごっそり入れ替えが必要だと思いますが。
モデルクラス