From f6f23c0c4926607bb8956dab5ac7e252e7d2b6b2 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Mon, 19 Jun 2017 20:32:55 +0800 Subject: [PATCH] srp --- .../82180735/ood/ood-assignment/README.md | 6 +++ students/82180735/ood/ood-assignment/pom.xml | 12 +++++ .../com/coderising/ood/srp/Configuration.java | 23 ++++++++ .../coderising/ood/srp/ConfigurationKeys.java | 9 ++++ .../java/com/coderising/ood/srp/Main.java | 50 ++++++++++++++++++ .../com/coderising/ood/srp/dao/UserDao.java | 22 ++++++++ .../ood/srp/domain/mail/MailConfigInfo.java | 35 +++++++++++++ .../ood/srp/domain/mail/MailInfo.java | 35 +++++++++++++ .../ood/srp/domain/product/ProductInfo.java | 25 +++++++++ .../coderising/ood/srp/product_promotion.txt | 4 ++ .../ood/srp/service/ProductInfoService.java | 44 ++++++++++++++++ .../ood/srp/service/PromotionMailService.java | 52 +++++++++++++++++++ .../ood/srp/service/UserService.java | 15 ++++++ .../com/coderising/ood/srp/util/DBUtil.java | 26 ++++++++++ .../com/coderising/ood/srp/util/MailUtil.java | 18 +++++++ .../src/main/resources/product_promotion.txt | 4 ++ 16 files changed, 380 insertions(+) create mode 100644 students/82180735/ood/ood-assignment/README.md create mode 100644 students/82180735/ood/ood-assignment/pom.xml create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/dao/UserDao.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailConfigInfo.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailInfo.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/product/ProductInfo.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/ProductInfoService.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/PromotionMailService.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/UserService.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/DBUtil.java create mode 100644 students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/MailUtil.java create mode 100644 students/82180735/ood/ood-assignment/src/main/resources/product_promotion.txt diff --git a/students/82180735/ood/ood-assignment/README.md b/students/82180735/ood/ood-assignment/README.md new file mode 100644 index 0000000000..c425e51701 --- /dev/null +++ b/students/82180735/ood/ood-assignment/README.md @@ -0,0 +1,6 @@ + +[TOC] +## 面向对象相关的作业 + +### 第一周作业 重构一个发送邮件的程序,使之符合SRP + diff --git a/students/82180735/ood/ood-assignment/pom.xml b/students/82180735/ood/ood-assignment/pom.xml new file mode 100644 index 0000000000..b55d53ffe1 --- /dev/null +++ b/students/82180735/ood/ood-assignment/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + com.yue + ood-assignment + 1.0-SNAPSHOT + + + \ No newline at end of file diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java new file mode 100644 index 0000000000..d11d29787e --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Configuration.java @@ -0,0 +1,23 @@ +package com.coderising.ood.srp; +import java.util.HashMap; +import java.util.Map; + +public class Configuration { + + static Map configurations = new HashMap(); + static{ + configurations.put(ConfigurationKeys.SMTP_SERVER, "smtp.163.com"); + configurations.put(ConfigurationKeys.ALT_SMTP_SERVER, "smtp1.163.com"); + configurations.put(ConfigurationKeys.EMAIL_ADMIN, "admin@company.com"); + } + /** + * 应该从配置文件读, 但是这里简化为直接从一个map 中去读 + * @param key + * @return + */ + public String getProperty(String key) { + + return configurations.get(key); + } + +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java new file mode 100644 index 0000000000..8695aed644 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/ConfigurationKeys.java @@ -0,0 +1,9 @@ +package com.coderising.ood.srp; + +public class ConfigurationKeys { + + public static final String SMTP_SERVER = "smtp.server"; + public static final String ALT_SMTP_SERVER = "alt.smtp.server"; + public static final String EMAIL_ADMIN = "email.admin"; + +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java new file mode 100644 index 0000000000..72dccf53ef --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/Main.java @@ -0,0 +1,50 @@ +package com.coderising.ood.srp; + +import com.coderising.ood.srp.domain.mail.MailConfigInfo; +import com.coderising.ood.srp.domain.mail.MailInfo; +import com.coderising.ood.srp.domain.product.ProductInfo; +import com.coderising.ood.srp.service.ProductInfoService; +import com.coderising.ood.srp.service.PromotionMailService; +import com.coderising.ood.srp.service.UserService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by justin on 17/6/19. + */ +public class Main { + + public static void main(String[] args) { + //查询商品信息 + ProductInfoService productInfoService = new ProductInfoService(); + ProductInfo productInfo = productInfoService.selectProduct(); + + //查询用户信息 + UserService userService = new UserService(); + List> userList = userService.querySubscriptions(productInfo.getProductID()); + + //构造邮件配置及发件人信息 + Configuration configuration = new Configuration(); + MailConfigInfo mailConfigInfo = new MailConfigInfo(); + mailConfigInfo.setSmtpHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER)); + mailConfigInfo.setAltSmtpHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER)); + mailConfigInfo.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN)); + + //构造邮件内容及收件人信息 + List mailInfos = new ArrayList(userList.size()); + for (Map map : userList) { + MailInfo mailInfo = new MailInfo(); + mailInfo.setMessage("尊敬的 "+map.get("NAME")+", 您关注的产品 " + productInfo.getProductDesc() + " 降价了,欢迎购买!"); + mailInfo.setSubject("您关注的产品降价了"); + mailInfo.setToAddress(map.get("EMAIL")); + + mailInfos.add(mailInfo); + } + + PromotionMailService promotionMailService = new PromotionMailService(); + + promotionMailService.sendEMails(mailConfigInfo,mailInfos,true); + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/dao/UserDao.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/dao/UserDao.java new file mode 100644 index 0000000000..89137e35d8 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/dao/UserDao.java @@ -0,0 +1,22 @@ +package com.coderising.ood.srp.dao; + +import com.coderising.ood.srp.util.DBUtil; + +import java.util.List; + +/** + * Created by justin on 17/6/19. + */ +public class UserDao { + + public List querySubscriptions(String productId) { + + String sendMailQuery = "Select name from subscriptions " + + "where product_id= '" + productId +"' " + + "and send_mail=1 "; + + + System.out.println("loadQuery set"); + return DBUtil.query(sendMailQuery); + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailConfigInfo.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailConfigInfo.java new file mode 100644 index 0000000000..bcfd9aa857 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailConfigInfo.java @@ -0,0 +1,35 @@ +package com.coderising.ood.srp.domain.mail; + +/** + * Created by justin on 17/6/12. + */ +public class MailConfigInfo { + private String smtpHost; + private String altSmtpHost; + private String fromAddress; + + public String getSmtpHost() { + return smtpHost; + } + + public void setSmtpHost(String smtpHost) { + this.smtpHost = smtpHost; + } + + public String getAltSmtpHost() { + return altSmtpHost; + } + + public void setAltSmtpHost(String altSmtpHost) { + this.altSmtpHost = altSmtpHost; + } + + public String getFromAddress() { + return fromAddress; + } + + public void setFromAddress(String fromAddress) { + this.fromAddress = fromAddress; + } + +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailInfo.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailInfo.java new file mode 100644 index 0000000000..07aa58602a --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/mail/MailInfo.java @@ -0,0 +1,35 @@ +package com.coderising.ood.srp.domain.mail; + +/** + * Created by justin on 17/6/12. + */ +public class MailInfo { + private String toAddress; + private String subject; + private String message; + + + public String getToAddress() { + return toAddress; + } + + public void setToAddress(String toAddress) { + this.toAddress = toAddress; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/product/ProductInfo.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/product/ProductInfo.java new file mode 100644 index 0000000000..2bc2be9d1e --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/domain/product/ProductInfo.java @@ -0,0 +1,25 @@ +package com.coderising.ood.srp.domain.product; + +/** + * Created by justin on 17/6/12. + */ +public class ProductInfo { + private String productID; + private String productDesc; + + public String getProductID() { + return productID; + } + + public void setProductID(String productID) { + this.productID = productID; + } + + public String getProductDesc() { + return productDesc; + } + + public void setProductDesc(String productDesc) { + this.productDesc = productDesc; + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/product_promotion.txt @@ -0,0 +1,4 @@ +P8756 iPhone8 +P3946 XiaoMi10 +P8904 Oppo_R15 +P4955 Vivo_X20 \ No newline at end of file diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/ProductInfoService.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/ProductInfoService.java new file mode 100644 index 0000000000..32b1733564 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/ProductInfoService.java @@ -0,0 +1,44 @@ +package com.coderising.ood.srp.service; + +import com.coderising.ood.srp.domain.product.ProductInfo; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.URL; + +/** + * Created by justin on 17/6/19. + */ +public class ProductInfoService { + + public ProductInfo selectProduct() { +// File file = new File("C:\\coderising\\workspace_ds\\ood-example\\src\\product_promotion.txt"); + URL base = Thread.currentThread().getContextClassLoader().getResource(""); + File file = new File(base.getFile(),"product_promotion.txt"); + BufferedReader br = null; + ProductInfo productInfo = new ProductInfo(); + try { + br = new BufferedReader(new FileReader(file)); + String temp = br.readLine(); + String[] data = temp.split(" "); + + productInfo.setProductID(data[0]); + productInfo.setProductDesc(data[1]); + + System.out.println("产品ID = " + productInfo.getProductID() + "\n"); + System.out.println("产品描述 = " + productInfo.getProductDesc() + "\n"); + + } catch (IOException e) { +// throw new IOException(e.getMessage()); + } finally { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return productInfo; + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/PromotionMailService.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/PromotionMailService.java new file mode 100644 index 0000000000..248d0b7a64 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/PromotionMailService.java @@ -0,0 +1,52 @@ +package com.coderising.ood.srp.service; + +import com.coderising.ood.srp.util.MailUtil; +import com.coderising.ood.srp.domain.mail.MailConfigInfo; +import com.coderising.ood.srp.domain.mail.MailInfo; + +import java.util.Iterator; +import java.util.List; + +/** + * Created by justin on 17/6/12. + */ +public class PromotionMailService { + + public void sendEMails(MailConfigInfo mailConfigInfo, List mailInfos, boolean debug) + { + + System.out.println("开始发送邮件"); + + + if (mailInfos != null) { + Iterator iter = mailInfos.iterator(); + while (iter.hasNext()) { + MailInfo mailInfo = (MailInfo) iter.next(); + + try + { + if (mailInfo.getToAddress().length() > 0) + MailUtil.sendEmail(mailInfo.getToAddress(), mailConfigInfo.getFromAddress(), mailInfo.getSubject(), mailInfo.getMessage(), + mailConfigInfo.getSmtpHost(), debug); + } + catch (Exception e) + { + try { + MailUtil.sendEmail(mailInfo.getToAddress(), mailConfigInfo.getFromAddress(), mailInfo.getSubject(), mailInfo.getMessage(), + mailConfigInfo.getAltSmtpHost(), debug); + + } catch (Exception e2) + { + System.out.println("通过备用 SMTP服务器发送邮件失败: " + e2.getMessage()); + } + } + } + } + + else { + System.out.println("没有邮件发送"); + + } + + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/UserService.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/UserService.java new file mode 100644 index 0000000000..bed06d4306 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/service/UserService.java @@ -0,0 +1,15 @@ +package com.coderising.ood.srp.service; + +import com.coderising.ood.srp.dao.UserDao; + +import java.util.List; + +/** + * Created by justin on 17/6/19. + */ +public class UserService { + + public List querySubscriptions(String productId) { + return new UserDao().querySubscriptions(productId); + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/DBUtil.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/DBUtil.java new file mode 100644 index 0000000000..f18e812954 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/DBUtil.java @@ -0,0 +1,26 @@ +package com.coderising.ood.srp.util; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DBUtil { + + /** + * 应该从数据库读, 但是简化为直接生成。 + * @param sql + * @return + */ + public static List> query(String sql){ + + List userList = new ArrayList(); + for (int i = 1; i <= 3; i++) { + HashMap userInfo = new HashMap(); + userInfo.put("NAME", "User" + i); + userInfo.put("EMAIL", "aa@bb.com"); + userList.add(userInfo); + } + + return userList; + } +} diff --git a/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/MailUtil.java b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/MailUtil.java new file mode 100644 index 0000000000..bb028c690c --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/java/com/coderising/ood/srp/util/MailUtil.java @@ -0,0 +1,18 @@ +package com.coderising.ood.srp.util; + +public class MailUtil { + + public static void sendEmail(String toAddress, String fromAddress, String subject, String message, String smtpHost, + boolean debug) { + //假装发了一封邮件 + StringBuilder buffer = new StringBuilder(); + buffer.append("From:").append(fromAddress).append("\n"); + buffer.append("To:").append(toAddress).append("\n"); + buffer.append("Subject:").append(subject).append("\n"); + buffer.append("Content:").append(message).append("\n"); + System.out.println(buffer.toString()); + + } + + +} diff --git a/students/82180735/ood/ood-assignment/src/main/resources/product_promotion.txt b/students/82180735/ood/ood-assignment/src/main/resources/product_promotion.txt new file mode 100644 index 0000000000..b7a974adb3 --- /dev/null +++ b/students/82180735/ood/ood-assignment/src/main/resources/product_promotion.txt @@ -0,0 +1,4 @@ +P8756 iPhone8 +P3946 XiaoMi10 +P8904 Oppo_R15 +P4955 Vivo_X20 \ No newline at end of file