Skip to content
Merged

srp #409

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions students/82180735/ood/ood-assignment/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

[TOC]
## 面向对象相关的作业

### 第一周作业 重构一个发送邮件的程序,使之符合SRP

12 changes: 12 additions & 0 deletions students/82180735/ood/ood-assignment/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.yue</groupId>
<artifactId>ood-assignment</artifactId>
<version>1.0-SNAPSHOT</version>


</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.coderising.ood.srp;
import java.util.HashMap;
import java.util.Map;

public class Configuration {

static Map<String,String> configurations = new HashMap<String,String>();
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);
}

}
Original file line number Diff line number Diff line change
@@ -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";

}
Original file line number Diff line number Diff line change
@@ -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<Map<String,String>> 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<MailInfo> mailInfos = new ArrayList<MailInfo>(userList.size());
for (Map<String,String> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P8756 iPhone8
P3946 XiaoMi10
P8904 Oppo_R15
P4955 Vivo_X20
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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<MailInfo> 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("没有邮件发送");

}

}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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<Map<String,String>> 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;
}
}
Original file line number Diff line number Diff line change
@@ -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());

}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
P8756 iPhone8
P3946 XiaoMi10
P8904 Oppo_R15
P4955 Vivo_X20