小编dju*_*ble的帖子

Java实用工具类与服务

Java在实用程序类(具有静态方法的类)和Service类(具有提供"服务"的公共方法的类)之间的区别是什么.例如,可以认为加密对象(提供加密,解密,散列或获取salt值的方法)是服务提供者,但许多人将此功能组合到具有静态方法的Utility类中,如CryptoUtil.encrypt(.. ).我试图弄清楚哪种方式更好地"设计".思考?

java service static utility

36
推荐指数
3
解决办法
3万
查看次数

对象转换模式

我有几个不同的类来自外部源(不可修改),代表相同的概念.例如Address.我有com.namespace1.Address(有田houseNum,street,city), com.namespace2.Address(与领域h,s,c),(namespace3.com.CoolAddress与领域house_num,street,city).

问题是我使用的某些Web服务需要某些Address对象类型,所以我需要创建一个com.namespace1.Address给定的a namespace3.com.CoolAddress.这些字段很容易映射,但我正在寻找一个如何做到这一点的模式.

从我的角度来看,实例对象AddressConverter没有意义,因为没有状态(只有行为),当类只有行为时,它归结为实用程序类中的静态方法.从长远来看,无论何时我需要将新对象映射到另一个,我都有一个地方可以添加/修改/删除方法.如何完成它可能会改变,但我知道代码所在的位置(在一次位置)并且可以在需要时更改映射.

思考?

java dictionary design-patterns object

16
推荐指数
1
解决办法
2万
查看次数

RESTful用户身份验证服务

嘿伙计们,这似乎经常被讨论,但我想围绕用RESTful服务进行身份验证做一个简单,淡化的问题.方案如下:

  • 有一个系统可以容纳注册用户的应用程序.系统公开RESTful API以访问这些用户.
  • 有一个具有登录表单的前端应用程序.应用程序可以是内部的,也可以是外部的.
  • 前端应用程序需要使用用户系统中的数据来验证用户.

现在的问题是如何根据用户系统中的数据验证在客户端应用程序中输入其凭据(用户名/密码)的用户,以确保其安全性和高性能?为了这个问题,假设客户端应用程序是某种Intranet的内部应用程序,但应用程序不会驻留在同一台机器上,只能通过该服务进行通信.

我理解让应用程序"超媒体驱动"的想法,但我们应该能够提供过滤/搜索服务.例如,考虑以下资源和API:

  • http://example.com/users
    • GET - 检索所有用户(分页,超媒体驱动)
    • POST - 创建新用户
    • 不支持PUT/DELETE
  • http://example.com/users/[id]
    • GET - 返回id = {id}的用户的完整表示
    • PUT - 更新用户,接收任何预定义的媒体类型
    • 删除 - 删除用户(具有适当的授权)
    • POST不受支持

基于以上所述,我的想法是在用户列表中使用客户端应用程序GET,按用户名进行过滤.该服务将哈希密码和salt返回给客户端,客户端将执行身份验证.

思考?

api rest web-services restful-authentication

9
推荐指数
2
解决办法
2万
查看次数

Java中的电子邮件使用策略模式

更新:增加了一个问题(问题#4).

大家好,

我正在构建自己的自定义电子邮件实用程序.现在,为了遵守单一责任原则,我想拥有以下类:MailerSender,MailProvider和EmailObject.MailSender更像是一个代表,请在下面查看:

public class MailSender {
    private IMailProvider mailProvider;

    public void setMailProvider (IMailProvider provider) {
        this.mailProvider = provider;
    }

    // option to set it up during construction
    public MailSender (IMailProvider provider) {
        this.mailProvider = provider;
    }

    public void sendEmail(EmailObject obj) {
        if(mailProvider == null)
            throw new RuntimeException("Need a mail provider to send email.");

        try {
            mailProvider.send(obj);
        } catch (Exception e) {
            // do something here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MailSender需要一个IMailProvider电子邮件提供商来完成发送电子邮件的工作.在下面找到它:

public interface IMailProvider {
    public void sendEmail(EmailObject obj);
} …
Run Code Online (Sandbox Code Playgroud)

java oop design-patterns strategy-pattern

6
推荐指数
1
解决办法
2212
查看次数