質問

私はGrailsに非常に初めてなので、私はあなたのために簡単な質問があることを願っています。

ドメインモデルがあり、このモデル内には関連モデル(1対多)があります。サービスとサービスが「n」タスクとしてと言ってみましょう。 (findallby()を介して)3つのサービスを選択します。たとえば、すべてのサービスには少なくとも1つのタスクまたは3つのタスクがあります。

今私の質問。私 しないでください 「Render FoundServicesとしてJSON」を返したい。理由:私は世界中の人々に私のモデルの定義と多分「秘密」プロパティを知らせたくありません。これらはすべてデータベースの返品/選択によって自動的に満たされています。それは正しい考えですか、それとも「あまりにも深く深いセキュリティ」と思われますか?

そこで、これらのオブジェクトと同じように、必要なデータをどのように返すことができるかを見つけようとしました。

私は試した:

List<Service> servicesSelection = Service.findAllByCompany("someCompany")
ArrayList services = new ArrayList();
for (Service service: servicesSelection) {
   ArrayList myService = new ArrayList()
   myService .add(service.id)
   myService .add(service.getServiceName())
   for (Tasks task: service.tasks) {
      ArrayList serviceTasks = new ArrayList()
      serviceTasks.add(task.id)
      serviceTasks.add(task.getTaskName())
      myService.add(serviceTasks)
   }
   services.add(myService)
}
render services as JSON

1)これは「オーバーヘッド」が多すぎますか?

2)「OKは問題ではなく、ドメインモデル全体を返してください(検索結果から)」と思いますか?

3)独自の「配列リスト」を一緒に配置した場合、各サービスのすべてのプロパティと「n」タスクリストに簡単にアクセスするために、これをドメインモデルに似ているためにこれを行うことができますか

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

役に立ちましたか?

解決

セキュリティ要件が特定の情報が共有されていないことを決定する場合、それはあまり頭上ではありません。ほとんどの場合、ドメインオブジェクト全体をJSONに変換することは問題ではないと思いますが、アプリは特別なケースかもしれません。

Groovy/Grailsの練習とより一致する方法でこれを行うためにコードを書くことができます。

def services = []
for (s in Service.findAllByCompany("someCompany")) {
   def tasks = []
   for (t in s.tasks) {
      tasks << [id: t.id, taskName: t.taskName]
   }
   def service = [id: s.id, serviceName: s.serviceName, tasks: tasks]
   services << service
}
render services as JSON

コードもIDと名前(マップの代わりにリストを使用している)のキーを提供していないことに気付きました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top