問題タブ [hexagonal-architecture]

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.

0 投票する
1 に答える
46 参照

android - データベースから上書き確認ダイアログを呼び出す

バックグラウンド

UI (アプリ)、ドメイン、およびデータベース (ルーム) を個別のモジュールとして、六角形のアーキテクチャとしてアプリをセットアップしています。UI のボタンを押すと、ユーザー入力データがルーム データベースに保存されます。Room データベースがSQLiteConstraintExceptionキーが DB に既に存在するという意味をスローする場合、データを上書きするかどうかをユーザーに問い合わせたいと思います。

私のアイデア

私はアンドロイド/コトリン開発に不慣れですが、これがどのように機能すると想像するかは、UIアラートダイアログをトリガーするイベントがあることです。DB モジュールでこのイベントを発生させ、アラート ダイアログが受け入れられた場合、コールバックが Room DAO で save メソッドを実行し、データを上書きします。

問題点

  • Kotlin のイベントに関するドキュメントをいくつか見つけようとしましたが、何もありませんでした。正しい用語を使用していない可能性がありますが、「イベント」は Kotlin では認識されていないようです。
  • DB モジュールは UI モジュールを認識しないため、ダイアログを DB から直接作成することはできません。これが、そもそもイベントを使用したい理由です。
  • Room は非同期であるため、保存メソッドをDispatchers.IOコルーチンで実行しています。私の知る限り、IO コルーチンで UI フラグメント (ダイアログなど) を作成することはできません。これまでのところ、使用してこの問題を回避してきましthis@MyActivity.runOnUiThreadたが、それは非常にハッキリしています。

私が試したこと

それで、最初の試みの私のハックジョブはうまくいきますが、まったく満足していませんこのコードは、保存ボタンが押されたときに呼び出されるビューモデルのメソッドにあります。 data.save()Dao が a を上げる場合は false を返し、それ以外の場合はSQLiteConstraintExceptiontrue を返します。引数は、またはforceを使用してデータを保存するかどうかを決定します。基本的に true の場合は既存のキーを上書きし、false の場合は SQL エラーをスローします。保存に失敗すると、ダイアログが作成され、強制的に上書きして再保存するコールバックが提供されます。onConflict = ABORTonClonflict = REPLACEforce

ロジックをクリーンアップするために、Kotlin でイベントまたは同等のものを使用することをお勧めします。

0 投票する
0 に答える
63 参照

flutter - Future関数でジェネリックパラメータをどのように適切に処理しますか?

Flutterアプリケーションに Hexagonal Architecture を実装しています。認証のために、後で認証リポジトリに継承されるインターフェースを作成しました。

2 つの関数は一般的なパラメーターを使用します。1 つは認証サービス (この場合は Amplify Cognito) まで変更できるソーシャル サインアップ用で、もう 1 つは変更可能なユーザー属性 (サービスまで) を受け取ります。

まあ、リポジトリでそれらをオーバーライドすることは問題ではありませんが、コードレベルで厄介なエラーが発生しています: ここに画像の説明を入力

ご覧のとおり、型は*で異なります (これはC++のポインターを意味するため、理解できません): The argument type 'AuthProvider' can't be assigned to the parameter type 'AuthProvider*'.dartargument_type_not_assignable.

この場合、次のエラーが表示されます。

それ以外の場合は、次のようになります A value of type 'List<AuthUserAttribute*>*' can't be assigned to a variable of type 'List<AuthUserAttribute>'. Try changing the type of the variable, or casting the right-hand type to 'List<AuthUserAttribute>'.dartinvalid_assignment

コードは次のとおりです。

両方の場合の共通点は、これらの関数を定義したジェネリック型です。

この問題は、ジェネリックを使用するときにのみ発生します。他の場合は発生しません。ソーシャル認証プロバイダーのタイプを変更したいFirebaseプロバイダーに変更する場合、原因に影響します。

この不一致の問題を解決するにはどうすればよいですか?

どうもありがとうございました。