产品设计培训东莞网络推广及优化
news/
2025/9/24 1:10:10/
文章来源:
产品设计培训,东莞网络推广及优化,广东建设网证件查询,建站哪家好wordpress有时候因为种种原因导致我们会写出很多丑陋的代码#xff0c;比如赶工时#xff0c;短暂性的偷懒#xff0c;不会设计模式等等导致代码沉积#xff0c;一个cs上万行代码这样场景是有发生#xff0c;
当然这里也包括我。。。所以时间充裕一点之后就想重构一下#xff0c;…有时候因为种种原因导致我们会写出很多丑陋的代码比如赶工时短暂性的偷懒不会设计模式等等导致代码沉积一个cs上万行代码这样场景是有发生
当然这里也包括我。。。所以时间充裕一点之后就想重构一下毕竟项目中的需求是不断变更的面对需求变更尽量做到最低限度的修改代码最大化的扩充
新代码还有一点就是不要过分的追求设计模式做到适可为止太设计模式了会导致类太多不好管理在项目开发中其实仔细考虑一下你会发现很多业
务逻辑都有相应的设计模式帮你优化毕竟这些都是前辈们踩了无数的坑经过无数的苦难留下来的智慧结晶。很多人列举设计模式都喜欢用生活中的例子但
毕竟生活中的例子如何应用到项目中对我们程序员来说还是比较抽象的所以这里我就列举我们实际的业务逻辑场景。 一实际场景介绍 我们在做千人千面的时候为了防止各大邮箱服务商对我们的邮件营销内容做屏蔽处理我们采用的策略就是众多模板库中随机抽取一封html样式表然后结
合具体的商品列表生成完全不一样风格的营销内容邮件争取最大可能的不被屏蔽而用户自己通过我们系统做的营销邮件我们又不能随机发送而是用户生成
什么样的邮件我们就发什么样的邮件ok现在这里就有两种策略场景了两种场景的最终目的都是生成邮件内容对吧。 1. 普通商家做营销活动的邮件这种策略没什么好说的是什么就发什么。
2.千人千面场景下的营销活动邮件这种策略采用随机抽取的模式 目前来说我们就这两种场景谁也指不定以后还会不会有其他的策略出来所以有必要用策略模式玩一下。 二构建UML 从vs2005开始就有一个强大的功能根据cs文件自动生成uml类图非常的直观也更容易的帮助我们设计更加合理的类图。 上面就是策略模式的uml图各个策略类中都有一个Setup方法用来设置email的内容具体各个类中的代码如下 1 AbstractStrategy public abstract class AbstractStrategy{ public abstract void Setup();} 2 RandStrategy
public class RandStrategy : AbstractStrategy { public override void Setup() { Console.WriteLine(千人千面模式下的邮件发送); } }
3 StraightStrategy
public class StraightStrategy : AbstractStrategy { public override void Setup() { Console.WriteLine(普通商家发送的邮件); } }
4StrategyContext
public class StrategyContext { AbstractStrategy strategy null; public void SetStrategy(AbstractStrategy strategy) { this.strategy strategy; } public void Setup() { this.strategy.Setup(); } }
5 Program
class Program { static void Main(string[] args) { StrategyContext context new StrategyContext(); //设置“随机策略“ context.SetStrategy(new RandStrategy()); context.Setup(); //设置 ”直接发送“ context.SetStrategy(new StraightStrategy()); context.Setup(); } } 最后我们运行一下 上面就是一个最简单的策略模式当我们设置不同的策略就会执行相应的行为实际当中并不会这么简单毕竟设计模式只是一个最优化的提炼排除干扰看本质。 三生产应用 首先生产中我们的AbstractSetup中的Setup方法肯定是要带有参数的而不是简单的无参如下
/// summary /// 短信邮件彩信设置模型 /// /summary public abstract class AbstractSetup { public abstract void Setup(LeafletEntity leaflet, DataRow row); }
然后直接赋值的逻辑也非常的简单需要根据数据库中设置的业务逻辑判断。
public class StraightSetup : AbstractSetup { public override void Setup(LeafletEntity leaflet, DataRow row) { //非顾问 leaflet.Title MySqlDbHelper.GetString(row, title); leaflet.SMSContent leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.短信) ? MySqlDbHelper.GetString(row, content) : string.Empty; leaflet.EDMContent leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.邮件) ? MySqlDbHelper.GetString(row, content) : string.Empty; leaflet.MMSContent leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.彩信) ? MySqlDbHelper.GetString(row, content) : string.Empty; leaflet.SendSMSCount Convert.ToInt32(row[sendcount]); } }
接下来就是随机抽取逻辑这个也是通过读取随机表来进行各种操作简单的代码如下
public class RandSetup : AbstractSetup { EventMarketingBLLNew eventMarketingBLLNew new EventMarketingBLLNew(); public override void Setup(LeafletEntity leaflet, DataRow row) { var eventMarketingInfo eventMarketingBLLNew.GetEventMarketingInfo(leaflet.MarketingID, leaflet.ShopID); if (eventMarketingInfo ! null) { //“短信”和“邮件”信息 var communicationInfo eventMarketingInfo.EventmarketingSmsEdmContentList.OrderBy(m Guid.NewGuid()) .FirstOrDefault(); if (communicationInfo null) return; if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.邮件)) { //第三步动态生成邮件模板 var styleInfo CacheUtil.GetRandomEmailStyle(); var tuple new EdmDraftBoxBLL().GetEdmHtmlTitle(communicationInfo.EDMJson, styleInfo.StyleId); leaflet.Title tuple.Item1; leaflet.EDMContent tuple.Item2; leaflet.Header tuple.Item3; leaflet.SendSMSCount 1; } if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.短信)) { leaflet.SMSContent communicationInfo.SMSContent; leaflet.SendSMSCount communicationInfo.SMSCount; } if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.彩信)) { leaflet.MMSContent communicationInfo.MMSContent; } } } }
最后就是策略上下文
public class SetupContext { AbstractSetup abstractSetup null; public void Set(AbstractSetup abstractSetup) { this.abstractSetup abstractSetup; } public void Setup(LeafletEntity leaflet, DataRow row) { this.abstractSetup.Setup(leaflet, row); } }
好了这个就是给大家演示的策略模式简单来说就是一句话针对同一命令或行为不同的策略做不同的动作。
原文地址http://www.cnblogs.com/huangxincheng/p/6347633.html.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914444.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!