問題タブ [fluent-interface]
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.
c# - C# の流暢なインターフェースに関する質問
私は次のクラスを持っています:
英語の文法では、「is something equal to something」または「does something greater than something」を使用できないため、Is.EqualTo と Does.GreaterThan を可能にしたくありません。制限する方法はありますか?
ありがとうございました!
c# - LambdaFunc<>とFluent
現在、Lambdasと連携して非常に優れた処理を実行するFluent実装がたくさんあります。脳を包み込んで、こういうものを作り始めたいのですが、脳が理解できる説明がまだ見つかりません。
PersonValidatorのこの簡単な例を考えてみましょう
私はこのようなバリデーターのメソッドを使用して、このすべての作業の一部を取得することができました...
次に、CannotBeNullおよびCannotBeEmptyの目的でIValidatorを拡張する拡張メソッドを作成できます。
ですから、前半と後半は問題があるようですが、どうやってまとめたらいいのかわかりません。
意味のある説明を探しています...「入手」したいのですが。:)
c# - C#の流暢なインターフェイスによるマルチレベルの継承
以下のサンプルコンソールアプリケーションを考えます。
質問#1:.Name()がtypeof OranizationBuilderを返すのに、.Write()がCorporationBuilderを呼び出すのはなぜですか?
質問#2:.Name()を取得してtypeof CorporationBuilderを返す方法は?
編集/更新
これが解決策の最初の試みです(以下を参照)。ただし、私はFactory内で立ち往生しており、.Organization()および.Corporation()メソッドタイプを構成する方法がわかりません。
具体的な問題領域は次のとおりです。
OrganizationBuilderとCorportationBuilderを構成するにはどうすればよいですか?
nhibernate - Fluent Nhibernate Automapping と Guids/UniqueIdentifiers を主キー フィールドとして使用する場合の問題
Fluent-NHibernate 自動マッピング機能 (最新バージョンのソフトウェア) を使用しようとしていますが、主キー フィールドとして Guid を使用すると問題が発生します。主キーに整数フィールドを使用すると、テーブルが正常に生成され、すべての Nhibernate 機能が正常に動作するように見えます。参考までに、NHibernate を使用してデータベース テーブルを生成しています。
整数 ID を持ついくつかのクラスを次に示します。
GUID を持つ同じクラスを次に示します。
これが私の構成です。
この問題を回避するために、1) Id フィールドに名前を付ける (必要ではないと思っていましたが) 2) Id を生成する (これは自動だと思っていました) ための規則 (以下を参照) を生成しようとしました。何が起こっているのか、なぜこれが機能しないのかわかりません。
また、自動マッピングをオフにして流暢に構成されたマップを使用すると、テーブルが正常に生成されます。
これは私を狂わせており、おそらく簡単な修正だと確信しています。何か案は?
ありがとうございました!
アンソニー
c# - FluentInterfaceで使用するためのネストされたラムダ
次のタイプが与えられます:
そして、ヘルパーで次のメソッドが与えられます...
私はこれを行うことができます:
myHelperの文字列リスト"Properties"には、式を介して渡されるプロパティの名前である値"Children"が含まれます。
私が今やりたいのは、タイプ階層を反映する機能だけで、同じことを達成できるようにすることです。
このようになりますか?
それともそれは可能であり、何が関係するのでしょうか?以前にネストされたラムダを見たことがありますが、何が関係しているのかわかりません。
前もって感謝します!
編集
少し混乱しているようですので、はっきりさせておきます。ラムダ式とメソッドチェーンを使用して、この「Object.SubObject.SubSubObject」のような文字列を作成できるようにしたいと思います。私の例ではこれを行っていますが、1レベルの深さ(クラスのプロパティ)のみです。私がやりたいのは、これを拡張して任意の深さまで拡張することです。
たとえば、次のような流暢なインターフェイスでラムダ式を使用したいと思います。
AddProps(x => x.Children).AddProps(xx => xx.GrandChildren)を実行すると、「プロパティ」文字列リストに「Children.GrandChildren」が追加されます。
testing - 複雑なテストデータの永続化
テストデータの生成にはビルダーパターンを使用しています。これらのドメインオブジェクトには、それらの間に関係があります。私たちの機能テストでは、これらのオブジェクトを永続化する必要があります。
このモデルについて考えてみましょう。
CIのプレーンインスタンスが必要な場合はaNew().c().build()
私はそれを持続させたいのなら私はしますaNew().c().saveIn(session)
既知のBIを持つCのインスタンスが必要な場合はaNew().c().with(b).build()
さて、あなたはアイデアを得ました。私の問題は、Cを永続化する場合、Bを永続化する必要があるかどうかです。それとも、事前に永続化する必要がありますか?妥当なデフォルトBが必要な場合はどうなりますか?Dを持続させたい場合はどうなりますか?それはすべてのA、B、Cを持続させるべきですか?
もちろん、実際のシステムははるかに複雑です(循環参照がある場合もあります)。複雑なテストデータを永続化するためのベストプラクティスを探しています。
編集:私は言語の壁にぶつかったようです、私の母国語は英語ではないので、あいまいさをお詫びします。詳細は次のとおりです。
- 私がテストしようとしているのはレガシーコードではありません
- 単体テストではなく、カバレッジテストを作成しようとしています(その結果、何もモックしません)
- 私がテストしようとしているソフトウェアは、データベースにある程度のデータが入力されている場合に機能します(すべてのエンティティを使用するわけではありません)。
PS。私は可能なベストプラクティスを見つけるのに苦労しているので、遠慮なく詳細を尋ねてください。私が思いついた最も近いものは次のとおりです。
- エンティティの構築中に明示的に設定されたものを追跡します。
- 明示的に設定されたエンティティはすでに永続化されていると想定し、永続化しないでください。
- 他のすべてを永続化します(独自の永続化機能を使用)。
これは機能しますが、私のスパイダーセンスはうずきます。テストコードにロジックが含まれるため、テストなしで処理するのは非常に複雑になるため、何か間違ったことをしていると思います。
編集2:私は自分自身をより明確にしようとします。ユニットといくつかの統合テストを書き込んで実行しているときは、テストデータが保持されていないため、問題なくメモリに保存されます。
しかし、テストデータを永続化しようとすると、Hibernateはリレーションなしでエンティティを保存できません。
どうすればこの問題を克服できますか?
java - 正規表現の代替 (流暢な?) インターフェイスの設計
Java の巨大な正規表現を見て、正規表現全般の保守性について少し考えさせられました。ほとんどの人は (一部の悪意のある perl モンガーを除いて)、正規表現はほとんど保守できないことに同意すると思います。
どうすればこの状況を改善できるかを考えていました。これまでのところ、私が持っている最も有望なアイデアは流暢なインターフェイスを使用することです。例を挙げると、次の代わりに:
このようなものを書くことができます
この非常に短い例では、正規表現を作成する一般的な方法は、凡庸な才能のある開発者なら誰でも理解できるものです。ただし、それぞれ 80 文字で 2 行以上を埋める不気味な表現について考えてみてください。確かに、(冗長な) 流暢なインターフェースには 2 行だけではなく数行が必要ですが、はるかに読みやすい (したがって保守しやすい) と確信しています。
今私の質問:
正規表現に対する同様のアプローチを知っていますか?
このアプローチは、単純な文字列を使用するよりも優れていることに同意しますか?
API をどのように設計しますか?
あなたのプロジェクトでそのようなきちんとしたユーティリティを使用しますか?
これを実装するのは楽しいと思いますか? ;)
編集: 単純な構造よりも高いレベルにあるメソッドが存在する可能性があると想像してください。たとえば、正規表現にはありません。
編集 - コメントの短い要約:
RegexBuddy - あなたのコードを読みやすくするために 30 ユーロを費やしてください (なんてこった?! そのような製品の純粋な存在は私の論文が正しいことを証明します - 私たちが今日知っている正規表現は悪いことです (tm))
Martin Fowler のアプローチ(まだ完璧にはほど遠い)
ほとんどの人が正規表現は定着すると考えているのは興味深いことですが、正規表現を読むにはツールが必要であり、正規表現を保守可能にする方法を考えるには賢い人が必要です。流暢なインターフェイスが最善の方法であるかどうかはわかりませんが、賢明なエンジニアがいると確信しています-私たち? ;) - 正規表現を過去のものにするために時間を費やす必要があります - 50 年間私たちと一緒にいるだけで十分だと思いませんか?
懸賞金を開く
報奨金は、正規表現への新しいアプローチの最良のアイデア (コードは不要) に授与されます。
編集 - 良い例:
これが私が話しているパターンの種類です-最初に翻訳できた人への追加の称賛-RegexBuddiesが許可されました(これはApacheプロジェクトからのものです)chiiとmezに与えられた追加の称賛:これはRFC準拠の電子メールアドレス検証パターンです-ただし、RFC822 ( ex-parrot.comを参照) であり、5322ではありません - 違いがあるかどうかはわかりません - もしそうなら、5322 に適合するパッチに次の追加の称賛を与えます ;)
c# - Fluent Entity Framework マッピング
Fluent NHibernate for NHibernate のように Fluent EF Mapping を実行する方法はありますか?