当前位置:首页 > 开发 > Web前端 > 前端 > 正文

58同城开源web框架 Argo (四)

发表于: 2013-09-26   作者:biocy   来源:转载   浏览次数:
摘要: 58同城开源的轻量级web框架 https://github.com/58code/Argo   今天开头说说抽象,面向对象的特点:抽象、继承、多态,好的设计都是基于优秀的抽象,抽象层次越高、越完善,他的扩展性就越好,也越容易理解。好比居家过日子,多多少少需要一些工具,可切割的、可裁剪的,这就是两个interface,于是我们准备了刀和剪子,就是一种实现。再后有了水果刀和切菜刀、园艺

58同城开源的轻量级web框架 https://github.com/58code/Argo

 

今天开头说说抽象,面向对象的特点:抽象、继承、多态,好的设计都是基于优秀的抽象,抽象层次越高、越完善,他的扩展性就越好,也越容易理解。好比居家过日子,多多少少需要一些工具,可切割的、可裁剪的,这就是两个interface,于是我们准备了刀和剪子,就是一种实现。再后有了水果刀和切菜刀、园艺剪子和裁衣服剪子,这就是多态。再然对菜进行分类,把荤素分开,准备同样的两把菜刀,一把切荤的一把切素的,就是重载。

中心思想就是以特性为核心,然后一点点的实现,过程中可以对底层不同特性组合使用,但是尽量保持最高抽象级别,以便于……(你懂的)

 

看看ArgoFilter 的 init()方法

public void init(FilterConfig filterConfig) throws ServletException {
        ServletContext servletContext = filterConfig.getServletContext();
        try {
            dispatcher = ArgoDispatcherFactory.create(servletContext);
            dispatcher.init();
        } catch (Exception e) {
            servletContext.log("failed to argo initialize, system exit!!!", e);
            System.exit(1);
        }
    }

ArgoDispatcherFactory.create(servletContext) 进入之后看到简单的两行代码

1. GroupConvention groupConvention = GroupConventionFactory.getGroupConvention();

这句话是获取了一个默认的约定配置。Argo的配置分为组织级和项目级,组织级包括配置文件路径configFolder(),日志文件路径logFolder(),组织级Guice的注入Module module(),项目级包括项目ID  id(),所有的controller类 controllerClasses(),项目级Guice的注入Module module()。 

 

2.Argo.instance.init(servletContext, groupConvention);

这里对全局的Argo进行初始化。instance应该是一个静态实例,Argo不是用Guice么,怎么还能看见new,这种强引用的初始化方法暴露出来,难道不怕重复加载导致错误么。再去看看这个init方法。里面的onlyOnce.check();可以保证只进行一次初始化,看来是自己写的一个工具类了。

 

List<Module> modules = Lists.newArrayList();
modules.add(new ArgoModule(this));

Module groupModule = groupConvention.group().module();
if (null != groupModule)
     modules.add(groupModule);

Module projectModule = groupConvention.currentProject().module();
if (null != projectModule)
     modules.add(projectModule);
看到了吧,秘密在这里,Argo本身用的 Module是 ArgoModule,此外还允许开发者定义自己的 Module,组织级和项目级分得很明确,就是SOA的基石,统一由Argo的Guice来管理调度。(有远见!)

 

 

this.argoDispatcher = getInstance(ArgoDispatcher.class);
return argoDispatcher;
init()方法返回ArgoDispatcher,ArgoDispatcher绑定的实现是 com.bj58.argo.internal.DefaultArgoDispatcher,Argo 用于处理请求的 调度中心。看得出他的service方法    public void service(HttpServletRequest request, HttpServletResponse response) 就是处理方法了。
这次看到这里,可以知道Argo底层应该是面向大型企业架构的一种简单抽象,具体实现到什么程度以后继续深入。

58同城开源web框架 Argo (四)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
58同城开源的轻量级web框架 https://github.com/58code/Argo 有的时候总是在想,什么样的工具才算是
WebWork WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架
58同城数据库架构设计思路 58同城,一个被贴上“神奇”标签的网站,海量信息背后到底支撑的数据库是
  经过大量自愿者的BUG提交,建议讨论之后,迎来了第四版。让我们一起来看看第四版更新了哪些新功
Android例子源码类似58同城的通过滑屏控制引导页 运行效果图如下,向右滑动屏幕,小人的小腿在跑呀
原文网址链接:http://www.csdn.net/article/2015-10-24/2826028 摘要:对很多创业公司而言,很难在
  特地等了好久才等到今天发布,想着好歹也算个特殊点的日子。   HoorayOS从最早只是一个想法,
Aranea Aranea是一个开源,面向组件,事件驱动的Java MVC Web框架。它提供一种通用简单的方式来构建
Rose 是由 人人网、糯米网 提供的、基于Servlet规范、Spring“规范”的开放源代码WEB开发框架。 Ros
Aurora Aurora是一个开源的,可配置的,完全面向对象的MVC框架。Aurora的form控制器用的是Spring框架
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号