小编dav*_*000的帖子

面向对象与分层;平衡“面向对象的纯度”和完成工作

我相信面向对象,但还没有达到为了“符合面向对象”而使用不适当的设计/实现的程度。

那么,如何处理Serlvet/EJB/DataContainer分层架构:

  • Servlet 接收请求并调用“业务层”(例如会话 EJB)
  • 业务层从数据库中定位DataContainer并操作它们来实现业务逻辑
  • DataContainers 不包含真正的代码,仅包含与数据库对应的获取/设置。

这种方法很有吸引力;DataContainer 的作用很明确,并且很容易知道数据来自哪里。

除了不是面向对象之外,这还会导致业务层类不明确,难以命名和组织。

即使我们试图变得更加“面向对象”(例如,将其中一些方法放入 DataConatiners 中),其中一些操作也会对多个数据集进行操作。

如何防止业务层变得令人困惑的程序,但又不会用业务逻辑污染您的数据容器?

例子

class UserServlet {
  handleRequest() {
    String id = request.get("id");
    String name = request.get("name");
    if (UserBizLayer.updateUserName(id,name))
      response.setStatus(OK);
    else
      response.setStatus(BAD_REQUEST);
  }
}

class UseBizLayer {
    updateUserName(String id, String name) {
        long key = toLong(id);
        user = userDAO.find(key);
        if user == null
            return false;
        if (!validateUserName(name))
            return false;
        user.setName(name);
        userDAO.update(user);
        return true;
    }

    validateUserName(String name) {
        // do some validations and return
    }
}

class …
Run Code Online (Sandbox Code Playgroud)

oop class-design

5
推荐指数
1
解决办法
688
查看次数

Scala包delcaration - 一种方式导致包对象可见,其他使得它不是?

foo/bar/my_package/package.scala:

package foo.bar
package object my_package {
  type SomeType = java.lang.String
}
Run Code Online (Sandbox Code Playgroud)

然后,在 foo/bar/my_package/my_sub/MyClass.scala

package foo.bar.my_package.my_sub

class MyClass {
  var x: SomeType = _
}
Run Code Online (Sandbox Code Playgroud)

这无法编译; SomeType找不到.如果我换MyClass.scala

package foo.bar.my_package
package my_sub

class MyClass {
  var x: SomeType = _
}
Run Code Online (Sandbox Code Playgroud)

一切正常.有什么不同!?!??!

(这是Scala 2.8.1)

scala package

4
推荐指数
1
解决办法
274
查看次数

Struts 1.3:在应用程序上下文之外转发?

Struts 1.3 应用。主网站不是由 struts/Java 提供的。我需要将 struts 操作的结果转发到网站中的页面,即在 struts 上下文之外。目前,我转发到上下文中的 JSP 并使用元刷新转发到真实位置。这似乎有点糟糕。有没有更好的办法?

java struts

3
推荐指数
1
解决办法
5315
查看次数

Omniauth,Devise,Open ID,CanCan - 什么是什么以及何时使用哪个解决方案用于Rails API应用程序

所以我正在开发一个Rails应用程序 - 主要提供API,我想锁定behjind一个很好的授权系统.我创建了Rails应用程序来呈现HTML,为此我使用了Devise和CanCan.这次我想为我的客户提供JSON服务.我基本上有以下要求:

  1. 需要一个强大的授权系统
  2. 用户应该能够使用现有的应用程序登录,例如facebook,twitter,链接和谷歌
  3. 应该有完整的堆栈授权

现在这是我的第一个应用程序,我写的提供API所以我开始研究,到目前为止我发现了人们使用的以下解决方案:

  1. 我见过人们使用Devise和CanCan
  2. 我见过人们谈论使用Oauth2 http://railscasts.com/episodes/353-oauth-with-doorkeeper?autoplay=true
  3. 我听说过......"使用门卫"
  4. 我听说过......"使用omniauth"

所以基本上我的一天研究基本上只是让我更加困惑.当我使用这些和我的要求时,我会使用这些!我正在努力理解字母汤,有人可以帮助我理解这一点

openid authorization ruby-on-rails oauth-2.0 omniauth

3
推荐指数
1
解决办法
743
查看次数