JiveJdon Community Forums
在线183人   首页   主题表   培训咨询   标签   查搜   注册    登陆 RSS
首页 » 论坛 » 领域建模设计经验谈
???en_US.forumThreadPrev.name??? 上一主题
RSS google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi QQ网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 11 回复(1页) 阅读138次
 发表新帖子   回复该主题贴
r7raul



发表文章: 76
注册时间: 2008年03月10日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
订购软件的设计思路 2008年06月24日 14:18 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
标签     
需求:ISV有一个软件,用户要订购此软件
if(软件是否是月租型)
{
直接开通 //是月租
}
else
{
if(是新订还是续订)
{//是新订

if(是否免费)
{ //免费
直接开通

}
else
{ //不是免费
执行新订流程
}


}
else
{

if(软件是否到期)
{ //到期

执行到期续订
}
else
{ //没到期
执行未到期续订
}

}
}
r7raul



发表文章: 76
注册时间: 2008年03月10日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:订购软件的设计思路 2008年06月24日 14:30 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
从中可以提炼出


一个软件是实体


是否月租,是否免费,是否到期,是否新订我设计为值对象,比如月租型可以设计为只有两个实例 一个是月租,一个不是月租,其它的以此类推


对于那些逻辑判断,我先设计个抽象规格,然后把那些规则判断定位其子类,每个子类中都有subscribe方法,参数是订购服务的实例,其中执行订购服务类中对应于相应规格的订购方法


接下去是设计订购服务中先定义一个 总的订购方法,例如


public boolean subscribe(Software asoftware)
{
for(循环那些已经定义了的规格实例)
{
if(符合此规格)
{
spec.subscribe(this);//this是订购服务类的实例,spec是相应规格
的实例
}

}

}
接着定义其它符合各种规格的订购方法
r7raul



发表文章: 76
注册时间: 2008年03月10日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:订购软件的设计思路 2008年06月24日 14:31 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
晕,括号没对齐。。。
banq



发表文章: 11282
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 70人关注
回复:订购软件的设计思路 2008年06月25日 16:28 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
>是否月租,是否免费,是否到期,是否新订
是状态,使用状态模式来解决,先画个状态图出来,是不是涉及不同部门权限操作等等。
r7raul



发表文章: 76
注册时间: 2008年03月10日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:回复:订购软件的设计思路 2008年06月25日 17:45 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
论坛不能上传图片。。。。。用状态模式? 我要做的是一个SAAS平台,提供ISV软件的接入,那些ISV提供软件,我们要为用户提供订购功能,订购功能就根据软件的各种类型来处理。状态模式是 封装转换过程,也就是转换规则,但是此处软件订购以后状态并不改变。规约 OR 状态模式??


[该贴被admin于2008-06-25 19:38修改过]


pub



发表文章: 118
注册时间: 2008年04月13日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:re:订购软件的设计思路 2008年06月27日 09:26 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
关于规则可以用职责链吧?
pub



发表文章: 118
注册时间: 2008年04月13日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:回复:re:订购软件的设计思路 2008年06月27日 09:35 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
===是否月租,是否免费,是否到期,是否新订我设计为值对象

我发表下我的意见
因为是否月租 是否不是月租
是否免费 是否收费
是否到期 是否未到期 分别为不同的状态机
而你放在一起去考虑了。这个思路就到了C的时代。 就算用上值对象也只是多加了一个概念
旧酒新瓶了。
状态这一块还得抽取 少点IF。多点对象。。。
看是群中的兄弟的贴 胡乱说几句 呵。
bosslee



发表文章: 34
注册时间: 2007年04月27日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:订购软件的设计思路 2008年07月23日 11:38 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
是否月租,是否免费,是否到期

是否可以说得详细点,

一个软件是否是月租的,一个软件是否是免费的,一个软件是否到期

这三个有点不一样的属性,月租和免费是,一个软件的特点,表达软件的一种方式,

但是,是否到期这个就要认真的考虑一下,到底用什么表示才能足够的表达出他的概念,


初步认为,前两者表达软件的特性,是否到期这个概念应该是状态


[该贴被bosslee于2008-07-23 11:41修改过]
[该贴被bosslee于2008-07-23 11:42修改过]
[该贴被bosslee于2008-07-23 11:43修改过]
freebox



发表文章:
注册时间: 2008年03月01日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:订购软件的设计思路 2008年07月26日 01:13 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
规则接口:

public abstract class Rule {
protected Software software;

public void setSoftware(Software software) {
this.software = software;
}

public static Rule getDefault(Software software) {
MonthRule rule = new MonthRule();
rule.setSoftware(software);
return rule;
}

public abstract Buy getBuy();
}

购买方案接口:

public interface Buy {
public void buy();
}

各规则:


class NewlyRule extends Rule {
public NewlyRule(Software software){
this.software=software;
}
@Override
public Buy getBuy() {
if (software.isNewly()) {
return new FreeRule(software).getBuy();
} else {
return new DateOffRule(software).getBuy();
}
}
}
class MonthRule extends Rule {
@Override
public Buy getBuy() {
if (software.isMonth()) {
return Buys.getBuy(Buys.IMMEDIATE);
} else {
return new NewlyRule(software).getBuy();
}
}
}
class FreeRule extends Rule {
public FreeRule(Software software) {
this.software = software;
}

public Buy getBuy() {
if (software.isFree()) {
return Buys.getBuy(Buys.IMMEDIATE);
} else {
return Buys.getBuy(Buys.NEW);
}
}
}
class DateOffRule extends Rule {
public DateOffRule(Software software) {
this.software = software;
}
@Override
public Buy getBuy() {
if (software.isDateOff()) {
return Buys.getBuy(Buys.DATEOFF);
} else {
return Buys.getBuy(Buys.CONTINUE);
}
}
}

各购买方案:

public class ContinueBuy implements Buy {
public void buy() {
System.out.println("还没到期,续订吗?");
}
}
public class DateOffBuy implements Buy {
public void buy() {
System.out.println(
"你过期了,快续订");
}
}
public class DefaultBuy implements Buy {
public void buy() {
System.out.println(
"这是默认处理");
}
}
public class ImmediateBuy implements Buy {
public void buy() {
System.out.println(
"中奖了!直接开通!");
}
}
public class NewBuy implements Buy {
public void buy() {
System.out.println(
"去新办手续吧");
}
}

购买方案选择:

public static final String CONTINUE = "CONTINUE";
public static final String DATEOFF =
"DATEOFF";
public static final String IMMEDIATE =
"IMMEDIATE";
public static final String NEW =
"NEW";

public static Buy getBuy(String type) {}

软件:

public class Software {
private boolean free;
private boolean month;
private boolean newly;
private boolean dateOff;
//get/set
}

测试:

public class TestSoftware {
@Test
public void test() {
Software software = new Software();
Rule rule = Rule.getDefault(software);
rule.getBuy().buy();
}
}
r7raul



发表文章: 76
注册时间: 2008年03月10日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:订购软件的设计思路 2008年07月29日 09:51 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
首先一个软件有收费,和免费之分,收费软件又分月租型和非月租型,月租型软件可以有公测期,和免费体验期(不收费),非月租型是指资源型软件如电话软件,名片打印软件,需要用户购买资源(如充值。。)才能使用。除资源型软件之外还有到期续订的概念。目前正在考虑,添加退订的功能。
bosslee



发表文章: 34
注册时间: 2007年04月27日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:re:订购软件的设计思路 2008年07月30日 01:01 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
请问,那免费的软件有些什么样的阿?

如果我要用免费的软件的话,我要对给定购系统下达什么样的命令阿?

我理解了,收费当中的租用的日软件的话,我要对定购系统说,

我要租用此软件,那么还有一种是,收费的,但是需要购买的那种,

那我要跟定购系统说我要购买此种软件。

那假如说,我的定购系统是,

OrderApplication

那现在的情况下(就是没有完全理解免费软件定购行为之前)我想只有两种方法

void rented(月租型软件):

void toBuy(非租用软件):

还有一些疑问,月租型的软件如果处于公测期的话,会有什么样的特性,跟免费体验期有什么不同

r7raul



发表文章: 76
注册时间: 2008年03月10日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
re:订购软件的设计思路 2008年08月04日 16:59 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
免费体验期的第一个月就是公测期
标签     
共有 11 回复(1页) Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入网上的图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 上传图片 word文档 Txt等附件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl+V可取出;提问题前先查询标签列表

使用帮助 手机m.jdon.com RSS add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的软件架构社区 推荐FireFox或Chrome快速浏览本站
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-10 jdon.com

anti spam