1.什么是应用框架(application framework)
个人认为,应用框架是软件开发中一组可重用的设计和代码。他是我们所开发的应用系统的支撑骨架,一种基本结构。而结构(structure)就是框架的本质。在我们的开发一个比较复杂的应用系统的过程中,我们会发现我们要实现的应用包含了非常多不断变化的东西,从而让我们难以把握他们之间的复杂关系。而通过结构,我们可以把这些不断变化的东西,组织成易于理解的少数几个主要部分。
应用框架为我们提供了结构和模板(模板本身也是一种结构),我们以此为基础来构建我们的应用系统。这样的一个应用框架,通常都是由一些抽象类,具体类和类之间的预定义的交互行为,规则来构成的。而我们就可以重用这些由框架提供的代码和设计。
2.应用框架的优点
(1)模块化 (2)可重用性 (3)易于扩展 (4)可维护 (5)简单性(隐藏复杂细节)
3.应用框架包含的提供的通用服务(功能)
(1)配置管理服务 (2)IOC容器 (3)缓存服务 (4)事件通知服务 (5)"Windows 服务" (6)消息队列
(7)身份验证服务 (8)授权服务 (9)文档管理 (10)事务管理 (11)工作流 (12)加密/解密
(13)日志管理 (14)异常管理 (15)脚本支持(16) 资源管理(17)数据访问,O/R Mapping
(18)License管理
// The contract
public interface IEmailSender

{
void Send(String from, String to, String message)
}
// The implementation
public class SmtpEmailSender : IEmailSender

{
private String _host;
private int _port;
public SmtpEmailSender(String host, int port)
{
_host = host;
_port = port;
}
public void Send(String from, String to, String message)
{
// Configures the Smtp class and sends the e-mail
}
}
public interface ITemplateEngine

{
String Process(String templateName)
}
public interface INewsletterService

{
void Dispatch(String from, String[] targets, String messageTypeName)
}
public class SimpleNewsletterService : INewsletterService

{
private IEmailSender _sender;
private ITemplateEngine _templateEngine;
public SimpleNewsletterService(IEmailSender sender,
ITemplateEngine templateEngine)
{
_sender = sender;
_templateEngine = templateEngine;
}
public void Dispatch(String from, String[] targets, String messageTypeName)
{
String message = _templateEngine.Process(messageTypeName);
foreach(String target in targets)
{
_sender.Send(from, target, message);
}
}
}
IWindsorContainer container = new WindsorContainer();
container.AddComponent( "newsletter", typeof(INewsletterService),
typeof(SimpleNewsletterService) );
container.AddComponent( "smtpemailsender", typeof(IEmailSender),
typeof(SmtpEmailSender) );
container.AddComponent( "templateengine", typeof(ITemplateEngine),
typeof(NVelocityTemplateEngine) );
// Ok, start the show
INewsletterService service = (INewsletterService) container["newsletter"];
service.Dispatch("hammett at gmail dot com", friendsList, "merryxmas");
public class SmtpEmailSender : IEmailSender

{
private String _host;
private int _port;
public SmtpEmailSender()
{
_host = "mydefaulthost";
_port = 110; // default port
}
public String Host
{
get
{ return _host; }
set
{ _host = value; }
}
public int Port
{
get
{ return _port; }
set
{ _port = value; }
}
//
}
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections>
<section name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, 
Castle.Windsor" />
</configSections>

<castle>
<components>
<component id="smtpemailsender">
<parameters>
<host>localhost</host>
<port>110</port>
</parameters>
</component>
</components>
</castle> 
</configuration>
using System;
using System.Configuration;
public class MyAwfulEmailClass

{
public MyAwfulEmailClass()
{
}
public void SendEmail( String from, String to, String message, String templateName )
{
String host = ConfigurationSettings.AppSettings["smtphost"];
int port = Convert.ToInt( ConfigurationSettings.AppSettings["smtpport"] );
NVelocityTemplateEngine engine = new NVelocityTemplateEngine();
String newMessage = engine.Process( message, templateName );
// Finally send message
}
}
本文探讨了应用框架的概念及其优点,并详细介绍了如何通过IOC(控制反转)实现组件化和服务化,以增强软件设计的灵活性和可扩展性。
22

被折叠的 条评论
为什么被折叠?



