`
yimlin
  • 浏览: 139131 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Interface plays as Placeholder, without any class implement

阅读更多

Interface play as Placeholder, without any class implement it
Author:Anders小明

有个这个题目是在ApectJ的应用,以及博客园子中一个blog讨论什么时候用接口(一个很古老的话题)。
接口作为一种重要的抽象能力,重要意义在于:
模型上看:接口代表做什么,而实现表示怎么做!
在框架上:接口代表稳定,而实现代表多变!
在语言上:接口代表0,而实现代表1,通过对象类型消除if…else…。
(这段话我<<Domain Model:业务流程的进一步分析2>>提过)
既然是应用开发,模型角度看根据现实意义,没有AspectJ前的开发,都是设计好一个接口,然后至少一个实现类,然后通过factory获取正确的实现类,后来spring出现了,实现了IoC。然而由于AspecJ横空出世了,我们又多了一种手段:接口作为占位符, 而没有实现类(当然有实现)。这是我在看到partech的sunflower的代码后才想到的!虽然我在<<AOSD:应用AOP实现业务逻辑>>一文中已经想到了一些,然而还是没有partech来的狠!
下面是一个简单的例子:
Order类

package placeholder;

import java.util.Date;

/** *//**
 * 
@author Anders.Lin
 *
 
*/

public class Order ...{
 
private String orderCode;
 
private Date commerceDate;
 
private Long userId;
 
 
public Order()...{  
 }

 
 
public Order(String orderCode, Date commerceDate, Long userId)...{
  
this.orderCode = orderCode;
  
this.commerceDate = commerceDate;
  
this.userId = userId;
 }

 
public Date getCommerceDate() ...{
  
return commerceDate;
 }

 
public void setCommerceDate(Date commerceDate) ...{
  
this.commerceDate = commerceDate;
 }

 
public String getOrderCode() ...{
  
return orderCode;
 }

 
public void setOrderCode(String orderCode) ...{
  
this.orderCode = orderCode;
 }

 
public Long getUserId() ...{
  
return userId;
 }

 
public void setUserId(Long userId) ...{
  
this.userId = userId;
 }
 
}


OrderService类

package placeholder;

/** *//**
 * 
@author Anders.Lin
 *
 
*/

public interface OrderService ...{
 
public void ship(Order order);
}

Main类

package placeholder;

import java.util.Date;

/** *//**
 * 
@author Anders.Lin
 *
 
*/

public class Main ...{
 
 
private OrderService orderService;
 
 
public void ship(Order order)...{
  orderService.ship(order);
 }

 
/** *//**
  * 
@param args
  
*/

 
public static void main(String[] args) ...{
  Order order 
= new Order("Anders007"new Date(), new Long(1));
  Main main 
= new Main();
  main.ship(order);
 }


}


OrderServiceAspect

package placeholder;

/** *//**
 * 
@author Anders.Lin
 *
 
*/

public aspect OrderServiceAspect ...{
 pointcut ship(): call(
void OrderService.ship(..));
 
 
void around(Order order) : ship() && args(order)...{
  System.out.println(
"ship "+ order.getOrderCode() + " sucess!");
 }

}

虽然AspectJ的功能如此强大, 接口真正做占位符用的情况,估计还是有很多人提出异议,这样做我有什么好处,和我写接口实现类相比?
好处目前,我能想的到的只有两个
1. 模型上,强迫所有人思考——接口到底做什么,而不是怎么做
2. 语言上,更加动态性,不在依赖接口的完整签名,只是输入参数和输出参数,看上去更接近.Net的Delegate

技术好坏只有自己展控了才知道,AspectJ提供这样一个选择,怎么做还是自己琢磨着吧。

分享到:
评论
2 楼 yimlin 2007-02-10  
//1. 模型上,强迫所有人思考——接口到底做什么,而不是怎么做
感觉实际是让代码变得复杂来做到这一点(OrderServiceAspect 做了OrderServiceImpl的事,没觉得把子类放在impl包或通过第三方包实现要好)

如果一定要从代码上看,并没有变的复杂。

//2. 语言上,更加动态性,不在依赖接口的完整签名
用IOC便实现了动态性,用aspect原则上也是依赖于aspect实现的啊
"不依赖接口的完整签名"我不明白,是不是不依赖具体类命名的意思?

是的,不需要方法名,输入参数类型上约束
1 楼 shaucle 2007-02-10  
//1. 模型上,强迫所有人思考——接口到底做什么,而不是怎么做
感觉实际是让代码变得复杂来做到这一点(OrderServiceAspect 做了OrderServiceImpl的事,没觉得把子类放在impl包或通过第三方包实现要好)
//2. 语言上,更加动态性,不在依赖接口的完整签名
用IOC便实现了动态性,用aspect原则上也是依赖于aspect实现的啊
"不依赖接口的完整签名"我不明白,是不是不依赖具体类命名的意思?

相关推荐

    Zabbix Enterprise Network Monitoring Made Easy PacktPub (2017)

    Nowadays, monitoring systems play a crucial role in any IT environment. They are extensively used to not only measure your system's performance, but also to forecast capacity issues. This is where ...

    Tce.rar_plays

    标题"Tce.rar_plays"和描述"The ActiveX class plays the MMControl1 component of vcd"涉及到的是关于ActiveX技术和VCD播放的相关知识点。ActiveX是微软开发的一种技术,主要用于Web应用程序,它允许开发者创建和...

    Winning Ways for Your Mathematical Plays

    《Winning Ways for Your Mathematical Plays》是一本由Elwyn R. Berlekamp、John H. Conway和Richard K. Guy共同著作的书籍,该书重点讲述了如何将博弈论运用到游戏中以获得胜利的策略和方法。这本书不仅是博弈论的...

    Winning Ways for Your Mathematical Plays, Vol. 3, 2nd Edition

    In the quarter of a century since three mathematicians and game theorists collaborated to create Winning Ways for Your Mathematical Plays, the book has become the definitive work on the subject of ...

    twitch-plays, 从聊天中获取输入并按相应键的抖动IRC机器人.zip

    twitch-plays, 从聊天中获取输入并按相应键的抖动IRC机器人 的抖动播放抖动的克隆 Pokemon 。安装你需要安装 pywin32插件。 如果遇到任何错误,尝试使用 python 2.7. x 运行这里操作。将 config/config_dist.py ...

    计算机组成与结构体系英文课件:Chapter3 BasicInputOutput.pdf

    - The advantage of memory-mapped I/O is its simplicity, as any instruction capable of accessing memory can handle I/O transfers. However, it consumes valuable memory address space, which could be ...

    cbaudioplay_delphi_audio_components_plays_

    **描述详解:** 描述中提到"cbAudioPlay plays any audio file supported by the installed Windows codecs using DirectShow." 这意味着cbAudioPlay利用了Windows操作系统中的DirectShow技术来播放音频文件。...

    Oracle RMAN Database Duplication(Apress,2015)

    and of course you can automate and schedule that command so that developers and testers are supplied with regular, known good databases without any manual intervention on your part. Fast and easy ...

    AlarmAlertFullScreen.rar_plays

    "AlarmAlertFullScreen.rar_plays"这一标题揭示了一个专为全面屏设计的闹钟警报系统,它不仅在屏幕上显示醒目的指示器,还会播放提醒声音,确保用户不会错过任何重要的时刻。在这个系统中,"plays"标签强调了声音...

    Winning.Ways.for.Your.Mathematical.Plays.V1

    Winning.Ways.for.Your.Mathematical.Plays.V1

    AS400

    在 AS400 中,C 表操作码 plays a crucial role in data processing and operation. It provides a powerful way to perform various operations on data, such as arithmetic, comparison, and logical operations....

    阿里音乐趋势数据 mars_tianchi_artist_plays_predict.csv

    阿里音乐趋势数据 mars_tianchi_artist_plays_predict.csv

    POC.rar_As One_POC

    POC is one of the most common I/O modules, namely the parallel output controller....role of an interface between the computer system bus and the peripheral (such as a printer or other output devices).

    Winning Ways for Your Mathematical Plays, Vol. 4, 2nd Edition

    In the quarter of a century since three mathematicians and game theorists collaborated to create Winning Ways for Your Mathematical Plays, the book has become the definitive work on the subject of ...

    nim.rar_nim_plays

    nim.rar_nim_plays 是一个压缩包文件,包含了一个名为 "nim" 的小游戏。这个小游戏可能基于古老的策略游戏“nim”,该游戏通常涉及两个玩家通过移除物体来竞争,目标是让对手最后移除物体。nim 游戏的核心在于数学...

    毕业设计(论文)-基于微信平台的多点温度采集系统手机Wifi通信设计.doc

    Embedded technology plays a crucial role in the design, as the SAM D21 microcontroller and ESP8266 module are both embedded systems that integrate processing power, memory, and communication ...

    videolib_flowplayer_videolib_plays_源码

    在“videolib_flowplayer_videolib_plays_源码”这个主题中,我们主要关注Flowplayer如何在浏览器环境中播放RTMP流。 首先,RTMP是一种实时传输协议,常用于在线视频流媒体服务,它允许服务器向客户端推送音频、...

    sb16snd_DOS_musicplay_plays_SoundBlaster_

    标题“sb16snd_DOS_musicplay_plays_SoundBlaster_”暗示了这是一个与DOS操作系统相关的程序,主要用于播放16位音频,利用Sound Blaster 16声卡的DMA(直接存储器访问)技术。这个程序可能是由源代码和可执行文件...

Global site tag (gtag.js) - Google Analytics