• 締切済み

どのようなクラス名をつけた方が良いのでしょうか?

C#でクラスライブラリを自作しようと考えているのですが、 入力された値などをチェックするバリデーションクラスを作りたいと思っています。 プログラム言語「PHP」のフレームワークで 「zend framework」というのがありまして、C#のライブラリでもそのような構造にしたいと思いまして、 そこで次のような構造で ┬ Mylibrary(ライブラリ名) │└ Validateフォルダ │ ├Alpha.css(アルファベットかチェック) │ ├Date.css(日付かチェック) ├Validate.css(各種のバリデーションを繋げて、一括でチェックする、または管理するクラス) というふうに考えていたのですが、コンパイルすると「Validate.css」で次のような 「名前空間 'Mylibrary' に 'Validate' の定義が既に含まれています。」 と名前がバッティングするようなのです・・・ なので仕方なく、「Validate.css」ファイルの方を、 「ValidateManager.css」(←この違いも自分の中では曖昧ですが・・・→)「ValidationManager.css」 や単に 「Validationt.css」 にしたり、それかValidateフォルダ(「namespace Mylibrary.Validate」)の方を 「Validations」(「namespace Mylibrary.Validations」) にしようか迷っています・・・ みなさんなら(このようなライブラリを作るか否かも含めて)どのような名前を付けるのか アドバイスを頂けないでしょうか?

みんなの回答

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

ご自分でよくわかっていないものを、プログラムで定義するのは不可能です。ただの自作のライブラリなら、必要と思う時が来るまで作る必要はないでしょう。 ディレクトリ構造ですが、DB の例で言えば私なら以下のようにするでしょう。 -DB --Statement.cs --PdoStatement.cs --MySqlStatement.cs ... あるいはこうかもしれません。 -DB --Statement ---AbstractStatement.cs ---PdoStatement.cs ---MySqlStatement.cs s を語尾につけるのは、読みにくい上に英語の語形に依存しすぎていて、私もあまり好きではないですね。 それと、PHPのことはよくご存知のようですが、新しい言語を勉強するなら新しい概念を学ぶことを恐れていてはいけません。 言語を学ぶこととは、文法だけではなく考え方を学ぶことでもあるので。

takagoo100
質問者

お礼

ご回答ありがとうございます。 なるほど、階層わけしないという選択肢もあるわけですか。 たしかに仰るとおり、もっとフレームワークや言語そのものを理解しないと 決定すら下せないですね・・・ この問題については、もう少し考えてみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

zend framework についてはあまり知りませんので、ちょっと検索しただけです。 見たところ functor クラスを作りたいようですが、そういうとき C# では delegate を使います。 やっつけですが、私なら以下のようにします。 struct Validation { bool IsValid; String Reason; }; delegate Validation Validator(String str); 仮称ValidationManager の必要性がよくわからないので、もうちょっと詳しくお願いします。「~を管理するクラス」というのはクラスの定義としてよくありません。なぜなら、データを管理することはプログラムの役割そのものだからです。

takagoo100
質問者

お礼

ご回答ありがとうございます。 ValidationManagerについては自分でもよく分からないですが、とにかく いろいろなバリデーションを繋げて扱うので、そしてよくManagerという関数を 見かけるので、それを付ければいいのかな?と思ったのです。 仮にZend通りの構造にしようとすると名前がバッティングしてしまうので、 避ける方法はないかという消極的な選択です・・・(PHPだとこのフォルダ構造で大丈夫なのです) もうひとつ、Zendをあまり知らないということですので申し訳ないですが、 たとえば、ZendにはZend_Dbというデータベースを扱うライブラリがあります。 そのZend_Db_StatementクラスとStatementのそれぞれのデータベースの種類ごとのファイルが 次のような構造であるのですが、 ┬ Zend │└ Dbフォルダ │ ├ Statementフォルダ │ │ ├ Pdo.php │ │ ├ Mysqli.php │ ├ Statement.php(←このクラス名がバッティングしてしまう) これもこの構造をC#で再現しようとすると名前がバッティングしてしまいます。 myuki1232さんならこの場合どのような名前を付けるのでしょうか? 自分としては、StatementフォルダをStatementsフォルダとしたくないので、 Statement.phpの方をStatementManager.phpとかにして避けようと考えていたのですが、 たしかにmyuki1232さんの仰るとおり英語の意味的にもプログラムの機能的にも おかなしな意味の名前をつけるのは変ですよね・・・ ただ自分的にはフォルダ(例えばPdoやMysqliなどのファイルが入ってるフォルダ)に sを付けるのは好きではないです。というのは、ひとつsをつけるとほかの全ての そういうフォルダにsを付けないと統一感がないというかめんどくさいというか、、、 だったらsなしで統一したいですね。。 http://framework.zend.com/manual/ja/zend.db.statement.html

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「識別子がクラス名でも名前空間名でもありません。」と出ます;

    このサイト様にある http://sorceryforce.com/manageddirectx/direct3d_cameraoperation.html Geometry::DegreeToRadian(); を自分のプログラムで使いたいのですが (※MSDNではこれです http://msdn.microsoft.com/ja-jp/library/ms889482.aspx) (マウスを乗せると ref class Microsoft::DirectX::Direct3D::Geometry sealed と出ます。) >error C2653: 'Geometry' : 識別子がクラス名でも名前空間名でもありません。 と出てしまいそのままでは動いてくれず、 >using namespace System; >using namespace System::Collections::Generic; >using namespace System::Diagnostics; >using namespace System::Drawing; >using namespace System::Text; >using namespace System::Windows::Forms; >using namespace Microsoft::DirectX; >using namespace Microsoft::DirectX::Direct3D; この部分をヘッダー領域に追記してみたのですが >error C2871: 'System' : この名前を指定された名前空間は存在しません。 他一式全部エラーが出てしまいます。 一応簡単な名前空間の勉強は済ませたつもりだったのですがさっぱり解りません; 私は何を間違えていて、 何を勘違いしていたり、勉強すべきなのか指摘して頂けると幸いです。 orz

  • フォルダー名とクラス名が被らないようにしたい

    C#3.5を使用しています。 同じプロジェクト下に「Class1」というフォルダと「Class1」というクラスを 作成してコンパイルすると 「名前空間 'Test' に 'Class1' の定義が既に含まれています。」 というエラーになって、 つまりどちらかの名前を変えれば(例えばClass1のクラス名のほうを「Test_Class1」に変更するなど)問題ないのですが、 できればフォルダの方の名前も、クラスの方の名前も、それぞれの配置位置も変えたくありません。 そういうふうにやるのは不可能なのでしょうか?

  • zendframeworkインストールエラー

    初めての質問失礼します PHPでシステム開発をしているのですが、Zend framework をインストール(コピー)して サンプルを作成してテストしてみたのですが以下のエラーが出てなかなか解決できません どなたかわかる方お願いいたします。 Apacheのエラーログ PHP Fatal error: require_once(): Failed opening required './Zend/Version.php' (include_path='.;c:/php/includes;C:/apache/htdocs/ZF2/library/') in C:\\apache\\htdocs\\rewrite_test\\index.php on line 3 自分なりに調べまして php.iniのinclude_pathのエラーでZend framework(以下ZFと書きます) ZFのライブラリが見つかっていないのだなということはわかるのですが 環境はWinXPSP2 Apache2.2.22 PHP 5.3.18です。 ApacheはC:/apacheにインストール もちろんDocumentRootはC:/apache/htdocs/です。 mod_rewriteも有効にしてあります。 php.ini のinclude_pathの設定 798 ; Windows: "\path1;\path2" 799 include_path = ".;c:/php/includes;C:/apache/htdocs/ZF2/library/" C:/PHP5にインストール 作ったサンプルのディレクトリ構成 C:\apache\htdocs\rewrite_test以下 にtest.html と index.phpをおき、 indexphpの内容 ・・・・・・・・・ <?php // Zend_Version クラスをrequireする。 require_once './Zend/Version.php'; // Zend Frameworkのバージョン情報をechoする echo 'hello, Zend Framework ! version = ' . Zend_Version::VERSION; ?> ・・・・・・・・・・・ .htaccessの内容 ・・・・・・・・・・・・ RewriteEngine on RewriteBase /rewrite_test RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php ・・・・・・・・・・・・ ZFのバージョン2.0.5 ApacheのDocumentRootにそのままコピーして ZF2とファイル名変更 でhttp://localhost/rewrite_test/test.htmlでアクセスすると http500えらーがでて上記のエラーがでてしまいます。 どこか間違えありましたらお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • $obj->varの変数のアクセスの仕方。

    php5で、 $objMyClass = new MyClass(); $objMyClass->var // varは任意で、実際は何でもよい。 print_r($objMyClass); として見たら、varという変数が$objMyClassに定義されているようなのですが、この変数へのアクセスをどうやったらいいのかわかりません。 教えてください。 と、言いますのは、zendFrameWorkでは、 http://framework.zend.com/manual/ja/zend.session.basic_usage.html $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "myusername"; とすると、 $_SESSION['Zend_Auth']['user'] = "myusername"; と同じ結果になるようなのです。 これは"user"を、Zend_Session_Namespaceクラス内で、 $_SESSION['Zend_Auth']の後ろにくっつけて多次元配列化しているんですよね? これと同じ実装をしたいと思っています。 もしかして何か勘違いしてますでしょうか?

    • ベストアンサー
    • PHP
  • 同じクラス名はつけないほうが良いですか?

    違うタグなら同じクラスの名前を付けてもいいでしょうか? たとえば、 ********************************************** <STYLE type="text/css"> th.test{ width:15em; } td.test{ color:red; } </STYLE> </head> <body> <table border=1> <tr><th class="test">a</th><th class="test">b</th></tr> <tr><td class="test">c</td><td>d</td></tr> </table> ********************************************** のように、thタグとtdタグで同じtestというクラス名を付けても問題なく動作しますが このようなコードはほかの人から見てもきれいなコードと認識されますか? 同じクラス名はつけないほうが良いですか?

  • ZendFrameworlkでZend_Sessionがつかえません

    表題の通り、Zend_Sessionが使えません。 $session = new Zend_Session_Namespace('global'); と記述すると、下のエラーがでます。インスタンスを生成する部分を除けば 正常に動作し、他のZendFrameworlkコンポーネントは使える状態です。同じソースでもレンタルサーバ上では思い通りに動くので私のローカル環境の設定がおかしいと思うのですが、何を見たらいいでしょうか。 環境はWindowsVista、Apache 2.2.6、PHP 5.2.4(xampp)、ZendFramework1.0.3です。 Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in C:\xampp\htdocs\index.php/1' in C:\xampp\ZendFramework\library\Zend\Session.php:359 Stack trace: #0 C:\xampp\ZendFramework\library\Zend\Session\Namespace.php(116): Zend_Session::start(true) #1 C:\xampp\htdocs\index.php(22): Zend_Session_Namespace->__construct('global') #2 {main} thrown in C:\xampp\ZendFramework\library\Zend\Session.php on line 359

    • ベストアンサー
    • PHP
  • zendのcontrollersについて

    Zendを始めたばかりのものです。 サーバ:XPで自営 Apache2,php5 Zendをダウンロードし、Cドライブのルートに「ZendFramework-1.9.0」 という名前で配置しました。 php.iniのinclude_pathの設定も変更し、 htdocsの直下にindex.phpを作成し <?php require_once 'Zend/Version.php'; //ライブラリの読み込み echo Zend_Version::VERSION; //現在のZend Frameworkのバージョンを表示 とすると、正常にバージョンが表示されます。 zendappsというフォルダーをhtdocsの中に作成し、index.phpに <?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('../zendapps/controllers'); とするとエラーになります。(エラーは長いので後述) '../zendapps/controllers'の部分かとも思いますが、 お分かりになる方、教えていただけると幸いです。 エラーの内容 Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\ZendFramework-1.9.0\library\Zend\Controller\Dispatcher\Standard.php:242 Stack trace: #0 C:\ZendFramework-1.9.0\library\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\ZendFramework-1.9.0\library\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\zendapps\index.php(3): Zend_Controller_Front::run('../zendapps/con...') #3 {main} thrown in C:\ZendFramework-1.9.0\library\Zend\Controller\Dispatcher\Standard.php on line 242

    • ベストアンサー
    • PHP
  • 構造 他のクラスの構造体を別のクラスで使いたい。

    C#で以下のようにCls1で定義している構造体をCls2の引数に使いたいのですが 定義されていないエラーになります。 Cls2で再定義すると、同じものが2つできて修正するときに困りそうです。 プログラムの構造について、何か良い方法がありましたら教えてください。 namespace A { class Cls1 { public struct Kumi { public string name; public int age; } private test(){ Kumi k; k.name = "太郎"; k.age = 5; Cls2 c2 = new Cls2(); c2.Write(k); } } } 別のクラスファイル namespace A { class Cls2 { public Write(Kumi k){ } } }

  • クラスのメモリ管理でこんがらがっています

    以下の条件があります。 (1)あるメンバ関数Aが、ライブラリの関数Bを呼ぶ (2)AがBを呼ぶ前に、AはBが使うオブジェクトCを生成する (3)AはBから応答が帰ってきた後、Cを削除する (4)AはCの詳細を知らないので、前方参照を使ってCのポインタを作ってそれを引数で渡す (5)BはAから渡されたCに、いろんなデータをつめていって、最後はAにCを引数で返す (6)Bが知っているCの構造は、一つのクラスにたくさんのクラスが集約されているもの この場合、Cのメモリ管理はAが行うことになると思いますが、実際にCに集約されているたくさんのクラスを生成するのは、Bになります。BがAにCを返すときに、Bが生成したたくさんのクラスは、Bの中できちんと消滅させなければいけないのでしょうか?でもそうすると、肝心のCの中身(データ)が消えてしまうので、意味が無いようにも思えます。それとも、Bではたくさんのクラスを生成しっぱなしでもよくて、Aが最後にきちんと全部消去してしまえばよいのでしょうか?でもそれだと、AはCの構造を知らないので、きちんと消去できない気がします。 こんな感じで、こんがらがっているのですが、どなたか問題なく動作させる方法を教えて下さい。結局、「たくさんのクラス」たちは、Bで消すべきか、Aで消すべきか、どちらでも大丈夫なのか、また、「たくさんのクラス」の中では、Aで消すものも、Bで消すものもあってよいのでしょうか?(実際には、Bの中だけで使用するクラスもあるので、そういうクラスはできればBで消去したいです)

  • フレームワーク、特にMVCがよくわかりません。

    転職先で、とりあえずソース見ておいてと言われたのですが、 どうもZend Frameworkを使っているようで、今まで経験ないこともあり見てもよく理解できません。 フレームワークについては検索すれば解説してるページなどが出てきて、 便利なんだなぁと抽象的には分かるのですが、ソースを見ると?って感じになってしまいます。 今まで、1画面=1ファイル、関数ライブラリ、クラスファイルという形でやってきていたので、ソースを見てもピンとこないのです。 ちなみに、オブジェクト指向についてはわかります。 ただ、フレームワーク特有のMVCの理解がうまくできません。 それから、フレームワークを使っている場合、実行環境だけでなく、 開発環境でもそれ用のツールが必要だったりしないのでしょうか? テキストエディタで書いてるよって言われたので更に?って感じになってます。 良い解説サイトがあったら教えて下さい。

    • ベストアンサー
    • PHP
論理回路の構成に関する質問
このQ&Aのポイント
  • 論理回路の構成について疑問があります。ANDと桁上げ先見加算器を使用して、4ビット×1ビットの回路を作る方法がわかりません。
  • 教えていただきたいです。
  • 可能な限り分かりやすく説明してください。
回答を見る