我有一个使用 Spring 的项目,它被分解成几十个 DAO 和关联的 DTO。我使用的是 JdbcTemplate,但没用太多,因为它正是我满意的抽象级别。
我目前正在我的 DTO 上执行延迟加载,方法是在它们的 getter 中放置一些相当复杂的代码。
基本样板逻辑是: 1.如果字段不为空返回它的值并退出 2. 联系适当的 DAO 并获取相关的 DTO 3. 保存到下次使用。
除了我的低级 DTO 与一大堆 DAO 耦合并且不是那么 POJOey 之外,它工作正常。
如果我将逻辑放在 DAO 中,则会出现另一种代码味道,因为它将处理其 DTO 的 CRUD 和延迟加载,据我所知,对象应该有单一的责任。
我希望有一个相对简单的 Spring 方法,我可以使用它在 DAO 和 DTO 之间注入(inject)一个 Lazy Loader 对象来实现这一点,但任何其他解决方案都适合我。
有什么想法吗?
最佳答案
将 DAO 包裹在 DAO 的周围更容易……这取决于您想要引入多少模型。 DTO 通常不用于将一对多作为两个或多个单独的数据库/dao 调用。在那种情况下,你真的需要一个 ORM。由于您正在寻找 dao 答案......
没有什么能阻止您将 DAO 链接在一起以提供一个 DTO。然后将 DTO 连接到 DAO 会更容易。它不是真正的服务层,它只是 DAO 的构建 block 。 所以你可能有一个 PersonDao 和一个 TelephoneNumberDao。一个人可以拥有多个电话号码,因此您也可以拥有 PersonModelDAo,它在底层使用 PersonDao 和 TelephoneNumberDao 来完成它的工作。
或者,避免整个问题,不要尝试在 DTO 级别映射人与电话号码之间的 1-N。只需让您的 UI 对正确的 DAO 进行正确的调用即可。在使用 DTO 时,我实际上更喜欢这个。
关于java - 在 Spring 中延迟加载 DTO 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/490595/
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我