問題タブ [dry]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
properties - プロパティ拡張言語(DSL)-何か存在しますか?
私の問題は次のとおりです。環境ごとにP台のサーバーを使用して、M個の異なる環境(qa / prod / etc。)でN個のアプリケーションを実行しています。掛け算すると、固有の構成の数は数百になります。これらの各アプリケーションには、一連の環境固有のプロパティ(パブリックホスト名、リスニングポート、最大メモリなど)があります。
掛け算すると、設定するプロパティは数千あります。ただし、プロパティがどうあるべきかを定義する実際のルールは非常に単純です。たとえば、物理サーバーごとに2つのアプリインスタンスがある本番環境では、1つのアプリがポート8080にバインドされ、もう1つのアプリが8081にバインドされます。
これが私が欲しいものです:プロパティ設定がどうあるべきかを指示するルールを指定できる言語(DSL)。繰り返さないようにしたいと思います。言語は宣言型である必要があります。私たちはかなりJava中心ですが、私がする必要があるのは名前と値のペアを生成することだけなので、自分自身を制限するのは嫌です。
そのようなものは存在しますか?何も見つかりませんでした。
Droolsや他のルールエンジンを使用できると思いますが、この目的には非常に重いものです。プロパティファイルは最小公分母です。それらをwar/earファイルに入れたり、ビルド中にテンプレートベースの置換を行うために使用したりできます。この種の問題を解決するためのより洗練された方法は確かにありますが、少なくとも短期。
asp.net-mvc - 言語に依存しないコントローラー/ビュー/アクションを作成する方法はありますか
私はMVCでいくつかのWebアプリケーションをコーディングしていますが、しばらくの間頭に浮かんだ問題があります。私が開発しているWebアプリケーションは、主にスウェーデン語で使用される予定です。言語が原因で、URLルーティングをスウェーデン語のURL名にマッピングしたいと考えています。
mysite.com/products/details/1
(英語のURL)mysite.com/produkter/detaljer/1
(スウェーデン語のURL)
同じコントローラー/ビュー/アクションに対してマップする言語に依存しないURLルーティングを使用できる方法はありますか?同じコントローラー/ビュー/アクションを英語などの異なる言語のサイトで再利用したいからです。
URLとページのコンテンツに同じ言語を使用したい理由は、訪問者が理解しやすくなり、ページランクと検索エンジン最適化が向上するためです。
soa - DRY原則と依存関係の最小化のバランスをとる方法は?
私は、DRY 原則 (Don't Repeat Yourself) に問題があり、Rete ルール エンジンを中心に展開する依存関係を最小限に抑えています。
大規模な IT 組織のルール エンジンはエンタープライズになる傾向があります (大文字の「E」に注意してください。これは深刻なビジネスです)。すべてのルールは一度だけ表現され、ナイスで DRY であり、高価なルール エンジンに集中化される必要があります。グループはルール エンジンを維持し、ルール セットの管理者です。
その IT 組織がアメリカの保険会社の一部である場合、多くの規則が存在する傾向があります。すべての州と製品に適用される規則がありますが、各州は製品ごとに独自の法律を展開する傾向があるため、規則はこれらの癖を反映する必要があります。カテゴリは多数あります: 保険数理、保険引受、さらには第三者機関からの信用および自動車のレポートの注文などです。
設計の観点から私が抱えている問題は、ルールと処理を集中化することは確かに素晴らしく DRY ですが、コストがかかることです。
- 中央に配置されたルール サービスにアクセスして結果を返すための追加のネットワーク ホップ。
- ルール エンジンが SOAP Web サービスとして公開されている場合はさらに複雑になります。消費者は SOAP 要求をパッケージ化し、応答を OXM して自分のドメインに戻す必要があります。
- ルール エンジンを維持する企業グループ、ルールを設定および維持するビジネス、ルールを使用する開発者の間の追加のインターフェイス。
- 追加の複雑さ - データ駆動型のソリューションで十分な場合があります。
- 追加の依存関係 - 独自のルールを制御できないコンポーネントは、テスト、展開、リリースなどのために、ルール エンジンの外部依存関係について心配する必要があります。
これらの問題は、他の多くのエンタープライズ テクノロジ (B2B ゲートウェイ、ESB など) で発生します。
同じエンタープライズ グループも、SOA を基本原則として宣伝しています。しかし、適切なサービス設計についての私の理解では、それらはビジネス スペースを並べて表示し、冪等、独立、および分離する必要があります。ルールが別の場所で維持されている場合、サービスはどのように独立して分離されているのでしょうか?
ルールが孤立した状況でのみ適用されることを示すことができる場合、依存関係を排除することは集中化よりも優先されるべきであると主張して、私は単純さの側で誤りを犯したいと思います. 議論がその日に勝つかどうかはわかりません。
だから私の質問は:
- 中央集権化と独立性の議論のどこに当てはまりますか?
- ルール エンジンなどのエンタープライズ ツールの使用経験は?
- どうすれば孤立の主張をより強くすることができますか?
- 私の見解が間違っているとすれば、中央集権化を支持する理由は何ですか?
python - サブクラス化せずにDjangoでモデルを複製/変異させる方法
「こんにちは、皆さん。別のモデルに基づいて、Django でモデルを作成しようとしていますが、サブクラス化や DB 関係はありません。私の元のモデルは次のようなものです。日付/時刻スタンプ付きのデータを保存します。
また、ほぼ同じモデルを使用して、これらの各エントリの数値データを毎日集計したいと考えています。DailyAvg() バリアントの場合、1 日あたり 1 つの平均しかないため、DateTimeField() の代わりに DateField() を使用します。
したがって、問題: DB に格納された対応する毎日の平均モデルを必要とするこれらのデータ クラスが多数存在することになり、定義はほとんど同じです。各データ クラスに対して同等の DailyAvg() クラスの定義を再入力することもできますが、これは DRY に違反しているようであり、尻の大きな痛みでもあります。また、新しい EntryDailyAvg を保存するたびに Django が新しい Entry ベースを保存するため、EntryDailyAvg サブクラス Entry を持つことはできません。
DailyAvg() クラスを自動的に (魔法のように) 生成する方法はありますか?
前もって感謝します!
javascript - ASP.NET MVC 2 - テンプレートを使用する場合と部分ビューを使用する場合
ASP.NET MVC 2 Preview 1 の新機能の 1 つは、エディター テンプレートと表示テンプレートの概念のサポートです。これにより、単純な HTML ヘルパー呼び出しで特定のオブジェクトを表示または編集するためにレンダリングする方法を事前に定義できます。
これはかなりクールですが、これと同じ目的を果たす部分ビューとの違いがよくわかりません。さらに、私が見た例では、エディター テンプレートに実際のフォーム タグが含まれておらず、特定のエディターにクライアント側の機能を提供する必要がある場合 (jQuery など)、そのコードを安全に配置することはできません。クライアントでロジックを追加するフォームに静的ハンドルがないためです。私が取り組んでいるアプリケーションでは、コンテンツを編集するためにレンダリングするエディター テンプレートと部分ビューが混在しています。フォームの複雑さに応じて、エディターを作成していますが、どちらか一方のアプローチを選択しましたが、これはもちろん、望ましくないレベルの矛盾をアプリケーションに追加します。
部分ビューよりもテンプレートを使用する理由、またはその逆を使用する理由 さらに、エディター テンプレートを使用する場合、そのエディターを使用するすべてのビューにコピーせずに、クライアント側のロジックをエディターに追加する理想的な方法は何ですか?
ruby-on-rails - 繰り返されるRailsコードを最適化する正しい方法
いくつかの類似した特性を持ついくつかのmodels-views-controllersを備えたRailsアプリケーションがあります。たとえば、5つの異なるモデルにコメント、投票、またはタグ付けできます。また、外部プラグインを多用しています。
現時点では、コメント、投票、タグなどを1つのモデル(およびそのビューとコントローラー)にのみ導入しました。ただし、結果に満足しているので、あるモデルの特定のMVCからこの共通の機能を切り取り、他のすべてのモデルからアクセスできるようにします。
私がこれを始める前のいくつかの質問(そして多分いくつかの一般的なアドバイスも素晴らしいでしょう):
1-どうすればいいですか?「lib」ディレクトリにモジュールを作成し(ミックスインクラスと同じですか?)、再利用可能なビューコードを一般的なパーシャルに移動することを考えていました。コントローラコードはどうですか?
2-最初のモデルのコーディング中にRubyonRailsを学んでいたので、コントローラーに一連のメソッドを追加する方法がおそらく間違っていました。コメントを追加する(addcomment)、投票を追加する(addvote)などのメソッドがあります。これらのメソッドはすべて、:collectionを介した非標準(非RESTful)ルーティングを必要とします。私が理解していることから、正しい方法は、コメントコントローラー機能を独自のコントローラーに移動し、標準のRESTfulルートを介してアクセスすることです。これは私がすべきことですか?
3-多くのプラグイン(例:act_as_commentable)は、モジュールを明示的にロードする必要はなく、モデルのどこかに「act_as_commentable」という行をロードするだけです。共通の機能にこのようなものを使用できますか?それはどのように機能しますか?
xslt - 「if」テストと「value-of」選択で XSLT コードを DRY に保つ
XSLT では、'if' に関してコードを DRY に保つための推奨される方法は何ですか?
現時点で私はこれをやっています:
「select/some/long/path」は一度だけ書きたいと思います。
c++ - constメソッドから非constメソッドを生成するにはどうすればよいですか?
const-correctnessを目指して努力していると、私はしばしばこのようなコードを書いていることに気づきます。
のような多くのメソッドの場合bar()
。constメソッドを手動で呼び出すこれらのnon-constメソッドを作成するのは面倒です。その上、私は自分自身を繰り返しているように感じます–それは私を気分が悪くさせます。
このタスクを軽減するために何ができますか?(マクロおよびコードジェネレーターは許可されていません。)
編集:litbのソリューションに加えて、私も自分のソリューションが好きです。:)
php - Drupal6: 複数のモジュールで必要な関数/定数をどこに保持するか?
一部の機能が重複するモジュールがいくつかあります。DRYに従って、これを別の場所に移動したいので、維持するコードが少なくなります。これを行うのに最適な場所はどこですか? モジュールを作成する (そしてそれを必要とするモジュールの依存関係にする) 場合、そのモジュールで定義された定数、関数、および変数が常に使用可能であることが保証されますか?
ruby-on-rails - x軸のポイントをプロットするより効率的な方法は?
棒グラフに価格結果を入力する必要があるプロジェクトに取り組んでいます。グラフには、特定の価格帯内のアイテムの数が表示されます。たとえば、Amazon で 0 ~ 10 ドルの価格帯に 9 つの商品がある場合、x 軸には 0 ~ 10 ドルが表示され、y 軸には 9 の値が入力されます。
私の棒グラフには 8 本の棒があり、すべて同様の価格帯です。$0-$10、$10-$20、$20-$30...など。
私の質問は次のとおりです。これらの個々のポイントを定義する最良の方法は何ですか? これらの商品には共通の価格帯がないため、x 軸を静的な数値にすることはできません。結果の範囲内で動的に計算する必要があります。
そのため、現在、次のように x 軸のポイントを作成しています。
私は最低の結果を取ります:
@numbers[0] = results[0];
そして、私は最高の結果を取ります:
@numbers[8] = results[-1];
次に、2 つの中央値を見つけます。 @numbers[4] = (@numbers[0]+@numbers[8])/2;
その後、このプロセスをさらに 6 回繰り返します
@numbers[2] = (@numbers[0]+@numbers[4])/2; @numbers[6] = (@numbers[4]+@numbers[8])/2; @numbers[1] = (@numbers[0]+@numbers[2])/2; @numbers[3] = (@numbers[2]+@numbers[4])/2; @numbers[5] = (@numbers[4]+@numbers[6])/2; @numbers[7] = (@numbers[6]+@numbers[8])/2;
これで必要な結果が得られますが、非常に繰り返しが多いようで、もっと良い方法があると思います。
ループを作成しようとしましたが、冗長な方法で記述できませんでした。
これを行うためのより迅速な方法、またはおそらくDRYのラインに沿った何かがありますか?