2

サーブレットから EJB に複数の HTTP パラメータを渡すための安全で標準的な手段は何ですか? このアプリケーションは、次のパラメーターを使用する Web ベースの SMTP クライアントです。

  • から
  • BCC
  • CC
  • 主題

モデル( ) をビュー( ) およびコントローラー( )EJBから分離するために、 を に直接渡すことは控えたいと思います。JSPservlet HttpServletRequest EJB

  • Session変数を使用する必要がありますか?
  • 6つのパラメータを渡す必要がありますか? 6 つのパラメーターを渡すには、制御層でビジネス ロジックを実行する必要があります。

コード:

 public String send_message(HttpServletRequest request) {
    try {
        Properties properties = System.getProperties();
        properties.put("mail.smtp.host", SMTP_HOST);
        Session session = Session.getInstance(properties, null);

        String from = request.getParameter("from");
        String to = request.getParameter("to");
        String cc = request.getParameter("cc");
        String bcc = request.getParameter("bcc");
        String subject = request.getParameter("subject");
        String body = request.getParameter("body");

        MimeMessage message = new MimeMessage(session);             
        Address sender = new InternetAddress(from);
        message.setFrom(sender);

        Address[] toAddresses = InternetAddress.parse(to);
        message.setRecipients(Message.RecipientType.TO, toAddresses);

        Address[] ccAddresses = InternetAddress.parse(cc);
        message.setRecipients(Message.RecipientType.CC, ccAddresses);

        Address[] bccAddresses = InternetAddress.parse(bcc);
        message.setRecipients(Message.RecipientType.BCC, bccAddresses);

        message.setSubject(subject);                
        message.setText(body);  

        Transport.send(message);
        return "Your message was sent successfully!";
    } catch (AddressException AE){
        return "Oops! There was an error parsing the addresses!";
    } catch (SendFailedException SFE){
        return "Oops! There was an error sending the message!";
    } catch (MessagingException ME){
        return "Oops! There was an error sending the message!"; 
    }
}

助言がありますか?

4

1 に答える 1

3

HttpServletRequest を直接 EJB に渡すことは避けたいと思います。

とても良い。HttpServletRequest は Web 層に属し、ビジネス層に渡されるべきではありません。

セッション変数を使用する必要がありますか?

同じ理由で、それは良い考えではありません。セッションもサーブレット層に属します。さらに、適切に設計されたアプリケーションでは、まったく不可能な場合があります。Web コンポーネントは EJB コンポーネントに依存しますが、その逆ではありません。EJB でセッションを使用すると、この関係が逆になります。

6つのパラメータを渡す必要がありますか? 6 つのパラメーターを渡すには、制御層でビジネス ロジックを実行する必要があります。

まだではないにしても、6 つのパラメータは「多く」にかなり近いものです。個人的には、これらの値を保持する新しいパラメーター オブジェクト (別名値オブジェクト、別名転送オブジェクト) を導入する価値があると、この状況を評価します。特に新しいコードを作成する場合、同じ概念 (メール) を定義する 6 つのパラメーターを持つメソッドを設計するのは罪です。複数パラメーターのメソッドは読みにくく、"壊れたウィンドウ効果" が発生しやすくなります。拡張が必要な​​場合は、さらに別のパラメーターを追加することをお勧めします。

6 つのパラメーターを渡すには、制御層でビジネス ロジックを実行する必要があります。

ある表現を別の表現に適応させるものと考えてください。これはビジネス ロジックではありません。BL はあなたの要件に直接影響を受けるものであり、あなたがここで行っていることは単なるアーキテクチャです。

于 2013-03-03T09:23:49.333 に答える