精华内容
下载资源
问答
  • Web前端使用到Sammy和Jquery两个JavaScript框架SammySammy.js 是一个微型的 JavaScript 框架用来简化 JavaScript 应用程序的编写,其核心只有 16K,压缩后 5.2K 大小;通过提供一个小的“核心”的框架...

    2.1.4 WEB前端的相关技术

    Web前端使用到Sammy和Jquery两个JavaScript框架。

    Sammy。Sammy.js 是一个微型的 JavaScript 框架用来简化 JavaScript 应用程序的编写,其核心只有 16K,压缩后 5.2K 大小通过提供一个小的“核心”的框架和一个不断增长的插件具体功能列表来实现这一点。这个内核包含一个简单的API,用于定义其定义的路由(url)和事件之间的绑定关系。

    JqueryJquery是继prototype之后又一个优秀的Javascript框架。它是轻量级的JavaScript库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互[6]

    Jquery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆JavaScript来调用命令了,只需定义id即可[7]

    2.2 系统整体开发架构概述与整合

    本系统采用Oracle11G为数据库,Hibernate担任数据访问与数据持久化的重任;Spring作为Bean的容器,对系统中的Bean进行统一的组织与管理;使用DWR+Sammy来取代传统S2SH框架中Struts2框架,负责页面的显示。

    2.2.1 系统整体开发架构

    为了让读者更容易理解整个系统的架构,架构图如图2-1所示

    <!--EndFragment-->

     

     

     

     

     

    1.整个系统与数据库的交互都是通过Hibernate来实现的。

    2.整个系统的javaBean都是委托Spring来管理的,包括Hibernate的sessionFactory,业务层的所有Bean,DWR使用的Bean也是在Spring容器取的。由于Spring采用了控制反转(反射机制),使得代码变得可配置,扩展性好,大大降低了代码间的耦合度。Spring是整个系统架构的核心所在,其配置信息都包含在applicationContext.xml文件中。

    3.传统S2SH架构的页面显示层是采用Struts2,本系统不采用是因为Struts对应于Ajax的支持先天不足,虽然其在开发流程上是比较简单易用。采用DWR3.0作为Ajax的支持,前端显示采用纯html+Jquery+Ajax调用来渲染页面的显示,同时为了弥补Ajax带来的无法保存页面状态的问题,又引入了前端MVC框架Sammy。为了让读者明白前端页面的渲染过程,渲染流程如图2-2。

    <!--EndFragment-->


     

     

    这是用户首次请求页面的过程

    1.用户输入网站地址,服务端处理该请求,将index.html页面,以及该页面中所引用的JavaScript、CSS、图片浏览器中,由浏览器第一次渲染页面。

    2.浏览器在渲染页面过程中,由于Sammy通过JavaScript捕获到了URL变化,于是转到Sammy控制器处理该事件。

    3.由于Sammy根据具体代码处理该事件,可能需要通过DWR再去请求需要的数据。通过DWR的回调函数从服务端返回了Json格式的数据。

    4.得到回调函数返回的Json格式的数据,浏览器端,使用JavaScript对其进行解析,然后第二次渲染到浏览器页面中。至此,页面显示完成。

    相信细心的读者已经发现与服务器多交互两次,页面要渲染两次,这样一来页面的加载速度会大打折扣。原来,这是第一次打开网站的情况,当用户打开网站之后,在网站中请求其他数据的时候,就不要第一次的网页渲染,而是只需要第二次的渲染流程即可,在一个页面中,事实上第一次渲染往往已经是不需要,第二次数据请求加渲染才是真正需要的。总得来说,实现了服务端与前端的分离,前端与服务端的数据交互只通过Json数据

    虽然Ajax是一项非常优秀的技术,但是在使用Ajax技术的同时也带来了一些不足。

    (1)由于页面是局部刷新的,所以不支持后退页面。

    (2)无法保存页面状态,使用了Ajax技术的页面,通过Url无法确定页面内容。

    (3)对搜索引擎也不友好,大多情况下无法被搜索引擎收录。

    之所以Sammy能够弥补Ajax的不足之处问题的关键在于前端的Url变化是“假跳转”,所谓的“假跳转”是在原有的Url后面加#xxxx,而这样的Url变化是不会再次向服务器发送请求的,恰恰这样的Url变化能够被Sammy作为事件捕获到,然后再由Sammy去处理这个Url“假”跳转事件,因此才有页面的第二次渲染。

    加了“#xxxx”这串Url,这串Url就是存放页面的参数,因此页面的状态也得以保存,同时Sammy也支持页面返回。

    <!--EndFragment-->
     

    展开全文
  • 关于sammy的初理解

    千次阅读 2017-01-13 19:05:37
    首先,Sammy.js是一个微型的js框架,用来简化javascript应用程序的编写,这个内核包含一个简单的API,用于定义其定义的路由和事件之间的绑定关系。 2.它到底干了什么(以用户首次请求页面的过程) (1)用户输入...

    1.概要

    首先,Sammy.js是一个微型的js框架,用来简化javascript应用程序的编写,这个内核包含一个简单的API,用于定义其定义的路由和事件之间的绑定关系。

    2.它到底干了什么(以用户首次请求页面的过程)

    (1)用户输入网址地址,服务器端处理该请求,将index.html页面,以及该页面中所引用的css,js等资源文件

    (2)浏览器在渲染页面的过程中,由于sammy通过js捕获到了URL变化,于是转到Sammy控制器处理该事件

    (3)由于Sammy根据具体代码处理该事件,可能需要通过DWR再去请求需要的数据,通过DWR的回调函数从服务端返回了json数据

    (4)得到了json数据后,浏览器端,使用js对其进行解析,然后第二次渲染到浏览器页面中,至此,页面显示完成。

    展开全文
  • 运行框架 在根目录(pf40)中下载了pf40后, 创建一个“ tmp”文件夹并授予其写入/读取的权限 如果在Linux上,则为chmod 777 tmp / 如果在Windows上,请右键单击并提供完整权限。 如果在Mac上,请单击文件夹,再单击...
  • Spring 5.0.0框架介绍_中文版_3.8

    千次阅读 2016-11-16 19:20:48
    Spring 5.0.0框架介绍_中文版_3.8

    文章作者:Tyan
    博客:noahsnail.com  |  CSDN  |  简书

    3.8 容器扩展点

    通常情况下,应用开发者不需要继承ApplicationContext的实现类。反而是Spring的IoC容器可以通过插入特定集成接口的实现来进行扩展。下面几节将描述这些集成接口。

    3.8.1 通过BeanPostProcessor定制bean

    BeanPostProcessor接口定义了回调方法,你可以实现这个方法来提供你自己的(或覆盖容器默认的)实例化逻辑,依赖解析逻辑等等。如果你想在Spring容器完成实例化,配置和初始化bean之后实现一些定制的业务逻辑,你可以插入一个或多个BeanPostProcessor实现。

    你可以配置多个BeanPostProcessor实例,通过设置order属性你可以控制BeanPostProcessors的执行顺序。只有BeanPostProcessor实现了Ordered接口时你才可以设置这个属性;如果你编写了你自己的BeanPostProcessor,你也应该考虑实现Ordered接口。更多细节请参考BeanPostProcessor接口和Ordered接口的Java文档。也可以查看下面的BeanPostProcessors编程注册的笔记。

    BeanPostProcessors操作一个bean(或对象)实例;也就是说,Spring Ioc容器实例化一个bean实例,然后BeanPostProcessors完成它们的工作。

    BeanPostProcessors的作用域是每个容器。只有你在使用容器分层的情况下,这才是相关的。如果你在一个容器中定义了一个BeanPostProcessor,它将只后处理容器中的beans。换句话说,某个容器中定义的beans不能被另一个容器中定义的BeanPostProcessor进行后处理,即使这两个容器是同一层上的一部分。

    为了改变实际的bean定义(例如,定义bean的蓝图),你可以使用3.8.2小节中描述的BeanFactoryPostProcessor

    org.springframework.beans.factory.config.BeanPostProcessor接口包含恰好两个回调方法。当这样一个类在容器中注册为后处理器时,对于容器中创建的每一个bean实例,在容器初始化方法(例如InitializingBeanafterPropertiesSet()方法和任何已声明的初始化方法)被调用之前和任何bean初始化回调函数之后,后处理器会从容器中得到一个回调函数。后处理器可以对bean实例进行任何操作,包括完全忽略回调方法。bean后处理器通常检查回调接口或将bean包裹到代理中。为了提供代理包裹逻辑,一些Spring AOP基础结构类被实现为bean后处理器。

    ApplicationContext会自动检测任何配置元数据中定义的实现了BeanPostProcessor接口的bean。为了能在后面bean创建时调用这些bean,ApplicationContext会将这些bean注册为后处理器。bean后处理器可以像其它bean一样在容器进行部署。

    注意当在一个配置类上使用@Bean声明一个BeanPostProcessor时,工厂方法的返回值应该是实现类本身或是org.springframework.beans.factory.config.BeanPostProcessor接口,这能清晰的表明bean的后处理器特性。此外,在完整的创建它之前,ApplicationContext不能通过类型自动检测它。由于BeanPostProcessor需要早一点实例化,为了在上下文中初始化其它的beans,早期的类型检测是非常关键的。

    实现BeanPostProcessor接口的类是特别的并被容器不同对待。所有的BeanPostProcessors和它们直接引用的beans在启动时进行实例化,它们是ApplicationContext特定启动阶段的一部分。接下来,所有BeanPostProcessors以有序形式进行注册,并适用于容器中所有更进一步的beans。由于AOP自动代理是作为BeanPostProcessor本身实现的,既不是BeanPostProcessors也不是它们直接引用的beans适合进行自动代理,因此没有融入它们的方面。

    对于这样的bean,你应该看到一个信息日志消息:”Bean foo没资格被所有的BeanPostProcessor接口进行处理(例如,不适合自动代理)。”。

    注意如果有beans使用自动装配或@Resource(可能回到自动装配)注入你的BeanPostProcessor,当搜索类型匹配的依赖候选者时,Spring可能访问未预料到beans,因此使它们不适合自动代理或其他类型的进行后处理的bean。例如,如果你有一个带有@Resource注解的依赖,field/setter名称不能直接对应bean声明的名字,也没有使用name特性,Spring将通过类型匹配来访问其它的bean。

    下面的例子展示了在ApplicationContext中如何编写,注册和使用BeanPostProcessors

    例子: Hello World, BeanPostProcessor类型

    第一个例子阐述了基本用法。这个例子展示了一个定制BeanPostProcessor实现,实现中调用了每一个bean的toString()方法。当容器创建它时,会将结果字符串输出到系统控制台。

    下面是定制BeanPostProcessor实现的类定义:

    package scripting;
    
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.beans.BeansException;
    
    public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {
    
        // simply return the instantiated bean as-is
        public Object postProcessBeforeInitialization(Object bean,
                String beanName) throws BeansException {
            return bean; // we could potentially return any object reference here...
        }
    
        public Object postProcessAfterInitialization(Object bean,
                String beanName) throws BeansException {
            System.out.println("Bean '" + beanName + "' created : " + bean.toString());
            return bean;
        }
    
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:lang="http://www.springframework.org/schema/lang"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/lang
            http://www.springframework.org/schema/lang/spring-lang.xsd">
    
        <lang:groovy id="messenger"
                script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy">
            <lang:property name="message" value="Fiona Apple Is Just So Dreamy."/>
        </lang:groovy>
    
        <!--
        when the above bean (messenger) is instantiated, this custom
        BeanPostProcessor implementation will output the fact to the system console
        -->
        <bean class="scripting.InstantiationTracingBeanPostProcessor"/>
    
    </beans>

    注意InstantiationTracingBeanPostProcessor是怎样简单定义的。它甚至没有一个名字,因为它是一个bean,它能像其它bean一样进行依赖注入。(前面的配置也定义了一个bean,它被Groovy脚本支持。Spring动态语言支持在31章『动态语言支持』中进行了详细描述。)

    下面的简单Java应用执行了前面的代码和配置:

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.scripting.Messenger;
    
    public final class Boot {
    
        public static void main(final String[] args) throws Exception {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("scripting/beans.xml");
            Messenger messenger = (Messenger) ctx.getBean("messenger");
            System.out.println(messenger);
        }
    
    }

    前面的应用输出结果如下:

    Bean 'messenger' created : org.springframework.scripting.groovy.GroovyMessenger@272961
    org.springframework.scripting.groovy.GroovyMessenger@272961

    例: RequiredAnnotationBeanPostProcessor

    使用回调函数接口或注解结合定制BeanPostProcessor实现是扩展Spring IoC容器的常见方法。一个例子是Spring的RequiredAnnotationBeanPostProcessor——一个BeanPostProcessor实现附带在Spring发行中,它保证了标记有(任意)注解的beans上的JavaBean属性能真正(配置成)通过值进行依赖注入。

    3.8.2 通过BeanFactoryPostProcessor定制配置元数据

    接下来我们要看到的扩展点是org.springframework.beans.factory.config.BeanFactoryPostProcessor。这个接口的语义与那些BeanPostProcessor类似,但有一个主要的不同:BeanFactoryPostProcessor可以操作配置元数据;也就是说,Spring IoC容器允许在容器实例化除了BeanFactoryPostProcessor之外的任何beans之前,BeanFactoryPostProcessor读取配置元数据并可能修改它们。

    你可以配置多个BeanFactoryPostProcessors,你可以通过设置order属性来控制这些BeanFactoryPostProcessors的执行顺序。但是,只有BeanFactoryPostProcessor实现了Ordered接口时你才可以设置这个属性。如果你编写了你自己的BeanFactoryPostProcessor,你也应该考虑实现Ordered接口。关于BeanFactoryPostProcessorOrdered的更多细节请看文档。

    如果你想改变真正的bean实例(例如,从配置元数据中创建的对象),你应该需要使用BeanPostProcessor(3.8.1小节中描述的)。尽管在BeanFactoryPostProcessor中处理bean实例在技术上是可能的(例如使用BeanFactory.getBean()),但这样做会引起过早的bean实例化,违背标准的容器生命周期。这可能会产生负面影响例如绕过bean后处理。

    BeanFactoryPostProcessors的作用域也是在每个容器中。这仅对于容器分层而言。如果在一个容器中你定义了一个BeanFactoryPostProcessor,它将适用于那个容器中的bean定义。一个容器中的bean定义不能被另一个容器中的BeanFactoryPostProcessors进行后处理,即使两个容器是在同一个分层中。

    为了修改定义在容器中的配置元数据,当一个bean工厂后处理器在ApplicationContext中声明时,它会自动执行。Spring包含许多预先定义的bean工厂后处理器,例如PropertyOverrideConfigurerPropertyPlaceholderConfigurer。定制的BeanFactoryPostProcessor也可以使用,例如,为了注册定制的属性编辑器。

    ApplicationContext会自动检测任何部署在它之内的实现了BeanFactoryPostProcessor接口的bean。在合适的时间,它会使用这些beans作为bean工厂后处理器。你可以像任何你使用的bean那样部署这些后处理器beans。

    关于BeanPostProcessors, 通常情况下你不想配置BeanFactoryPostProcessors为延迟初始化。 如果没有别的bean引用Bean(Factory)PostProcessor,后处理器将不会实例化。因此,对它进行延迟初始化会被忽略,即使你将<beans/>元素中的default-lazy-init特性设置为trueBean(Factory)PostProcessor也会急切的初始化。

    例: 类名替换PropertyPlaceholderConfigurer

    你可以使用PropertyPlaceholderConfigurer读取单独文件中的bean定义来使属性具体化,这个单独文件使用标准的Java Properties格式。这样做可以在部署应用时定制特定环境属性例如数据库URLs和密码,没有复杂性或修改主XML定义文件及容器相关文件的风险。

    考虑一下下面的基于XML定义的配置元数据片段,其中定义了一个带有占位符的DataSource。这个例子展示了从外部Properties文件进行属性配置。在运行时,PropertyPlaceholderConfigurer会应用到元数据中,将会替换DataSource中的一些属性。通过${property-name}形式的占位符指定要替换的值,这遵循了Ant/log4j/JSP EL风格。

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:com/foo/jdbc.properties"/>
    </bean>
    
    <bean id="dataSource" destroy-method="close"
            class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    真正的属性值来自于另一个以标准Java Properties形式编写的文件:

    jdbc.driverClassName=org.hsqldb.jdbcDriver
    jdbc.url=jdbc:hsqldb:hsql://production:9002
    jdbc.username=sa
    jdbc.password=root

    因此,在运行是字符串${jdbc.username}被替换为sa,其它的匹配属性文件中的key的占位符的值以同样方式替换。PropertyPlaceholderConfigurer会检查bean中大多数属性和特性的占位符。此外,占位符的前缀和后缀都可以定制。

    Spring 2.5中引入了上下文命名空间,可以通过专用配置元素配置属性占位符。在location特性可以提供一个或多个位置,多个位置用逗号分开。

    <context:property-placeholder location="classpath:com/foo/jdbc.properties"/>

    PropertyPlaceholderConfigurer不仅仅查找指定Properties文件中的属性。默认情况下,如果不能在指定属性文件中找到属性,它也检查Java System属性。你可以通过下面三个支持的整数值中的一个设置配置器的systemPropertiesMode属性,从而定制查找行为。

    • never (0): 从不检查system属性

    • fallback (1): 如果不能在指定文件中解析属性,检查system属性,这是默认值。

    • override (2): 在查找指定文件之前,首先检查system属性,这可以使系统属性覆盖任何其它属性源。

    更多信息请看PropertyPlaceholderConfigurer文档。

    你可以PropertyPlaceholderConfigurer替换类名,有时候非常有用,特别是运行时你必须选择一个特别的实现类的情况下。例如:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>classpath:com/foo/strategy.properties</value>
        </property>
        <property name="properties">
            <value>custom.strategy.class=com.foo.DefaultStrategy</value>
        </property>
    </bean>
    
    <bean id="serviceStrategy" class="${custom.strategy.class}"/>

    如果这个类不能在运行时解析成一个有效类,对于一个非懒惰初始化的bean,当它要创建时,在ApplicationContextpreInstantiateSingletons()期间,bean会解析失败。

    例: PropertyOverrideConfigurer

    PropertyOverrideConfigurer,另一个bean工厂后处理器,类似于PropertyPlaceholderConfigurer,但不像后者,最初的定义可以有默认值或bean属性一点也没有值。如果一个覆写的Properties文件对于某个bean属性没有任何输入,会使用默认的上下文定义。

    注意bean定义没有意识到被覆写了,因此从XML定义文件中它不能立刻很明显的看出在使用覆写的配置器。为了防止多个PropertyOverrideConfigurer实例对于同一个bean属性定义不同的值,根据覆写机制,使用最后一个定义的值。

    属性文件配置形式如下:

    beanName.property=value

    例如:

    dataSource.driverClassName=com.mysql.jdbc.Driver
    dataSource.url=jdbc:mysql:mydb

    例子文件可以被包含名为dataSource bean的容器定义使用,它有一个driverurl属性。

    混合属性命名也支持,除了最后被覆写的属性,只要路径的每部分都已经是非空(假设构造函数进行初始化)。在这个例子中:

    foo.fred.bob.sammy=123

    foo bean中的fred属性的bob属性的sammy属性设为标量值123

    指定的覆写值总是字面值;它们不能转成bean引用。当XML bean定义中的初始值指定了一个bean引用时,这个规范同样有效。

    Spring 2.5引入了上下文命名空间,可以用专用配置元素配置属性覆写:

    <context:property-override location="classpath:override.properties"/>

    3.8.3 使用FactoryBean定制实例化逻辑

    为对象实现org.springframework.beans.factory.FactoryBean接口的是工厂本身。

    FactoryBean接口是Spring IoC的实例化逻辑可插入性的一个点。如果你有复杂的初始化代码,相比于大量的冗余的XML代码用Java语言来表达会更好,那么你可以创建你自己的FactoryBean,在类里面编写复杂的初始化逻辑,并将你定制的FactoryBean插入到容器中。

    FactoryBean接口提供了三个方法:

    • Object getObject(): 返回一个工厂创建的对象实例。这个实例可能被共享, 依赖于工厂是否返回一个单例或原型。

    • boolean isSingleton(): 如果FactoryBean返回单例,返回true,否则返回false。

    • Class getObjectType(): 返回getObject()方法返回的类型,如果类型不能提前知道则返回null。

    FactoryBean的概念和接口在Spring框架中的许多地方都使用了;Spring本身中有不止50个FactoryBean接口的实现。

    当你需要向容器请求一个真正的FactoryBean实例本身来代替它产生的bean时,调用ApplicationContextgetBean()方法时,bean的id前面要加上一个$符。因此给定一个id为myBeanFactoryBean,在容器中调用getBean("myBean"),返回FactoryBean的产品,但调用getBean("&myBean")会返回FactoryBean实例本身。

    展开全文
  • 框架的理解

    2020-11-03 06:21:14
    框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 可以说,一个...

    框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。

    可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。

    应用框架的概念也很简单。它并不是包含构件应用程序的 小片程序,而是实现了某应用领域通用完备功能(除去特殊应用的部分)的底层服务。使用这种框架的编程人员可以在一个通用功能已经实现的基础上开始具体的系 统开发。框架提供了所有应用期望的默认行为的类集合。具体的应用通过重写子类(该子类属于框架的默认行为)或组装对象来支持应用专用的行为。
     
    框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

    一个框架是一个可复用设计,它是由一组抽象类及其实例间协作关系来表达的 [Johnson 98]。

    一个框架是在一个给定的问题领域内,一个应用程序的一部分设计与实现[Bosch 97]。

    为什么要用框架?
      因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基 础工作,你只需要集中精力完成系统的业务逻辑设计。 而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问 题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。

    软件为什么要分层?
      为了实现“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源…总之好处很多啦:)。

    为什么要进行框架开发?
    由于框架能重用代码,因此从已有构件库中建立应用变得非常容易,因为构件都采用框架统一定义的接口,从而使构件间的通信简单。

    笔记:框架就是某种应用的半成品,里面有许多已有的构件,它们有统一定义的接口,取你所需组合成你想要的软件就可以了。

    这篇博客是截取下面博客的一些内容,这篇博客是一篇笔记

    这是那篇博客的链接https://blog.csdn.net/Sammy_chan/article/details/1895207

    展开全文
  • 1.提供一个主应用框架,包含路由功能,视图动态加载以及基本的错误处理 2.脚本和模板的模块化管理 3.对子视图的支持 除了标题上的三个库,还用到了一个很不错的knockout扩展: knockout-amd-helper ...
  • 其他一些 JavaScript 框架包括:MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。 其中某些框架也使用 $ 符号作为简写(就像 ...
  • Spring 5.0.0框架介绍_中英文对照_3.8
  • 什么是框架

    2019-06-20 18:52:10
    框架概念及其定义 概念 框架是一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度 定义 框架是一种经过...
  • ...看了很多Android学习之路,大多是为了宣传某个网站或是视频,或是给了一些关于做游戏的建议。...作为一名新入Android,不...Sammy_Snail 原地址http://blog.csdn.net/hun_sunny/article/details/8312696
  • JavaScript宝座:七大框架论剑

    千次阅读 2012-08-09 16:08:44
    请注意,AngularJS可以说是介于库和框架之间一种形态:它不要求开发时遵守特定的文件组织方式(与库类似),但在运行时,它提供一个“应用生命周期”,可以对号入座地把代码安排进去(与框架类似)。之所以把它归入...
  • 服务端版:基于nodejs)前端UI框架JqueryMiniUI: http://www.miniui.com/(适用于管理后台、ERP)Bootstrap 3.3:http://v3.bootcss.com/ (资料齐全、提供less、sass版)AUI: http://amazeui.org/getting...
  • JavaScript MVC 框架开源软件

    千次阅读 2015-03-24 20:01:07
    Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。 AngularJS很小,只有60K,兼容主流浏览器,与 jQuery 配合...
  • 如何在页面上同时使用 jQuery 和其他框架?jQuery 和其他 JavaScript 框架正如您已经了解到的,jQuery 使用 $...其他一些 JavaScript 框架包括:MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、...
  • 3.4 依赖
  • 前端框架

    2018-05-18 11:28:00
    Sammy.js ——优点:易于学习,更容易和现存的服务端应用程序整合;缺点:过于简单,无法应用于大型应用程序中。 Spine.js ——优点:轻量级,文档很完备;缺点:它的核心概念“spine”是异步的用户界面,这...
  • Web应用框架汇总

    千次阅读 2018-03-05 14:23:17
    Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架,Web应用框架有助于减轻网页开发时共通性活动的工作负荷,...
  • Spring框架学习

    2018-11-29 16:42:18
    文章目录Spring框架学习11月28日Spring Framework OverviewHistorySpring的design philosophyIoC ContainerIntroductionContainer OverviewConfiguration MetadataInstantiating a ContainerUsing the containerBean...
  • Javascript框架介绍

    2012-01-04 10:35:58
    JavaScript的快速开发框架非常多,比较火的有:Jquery, Dojo, ExtJS, MooTools等, 如果不知道如何选择,可以参见这些JS框架的对比:Comparison_of_JavaScript_frameworks 还有一个框架性能的基准测试:...
  • Dependencies
  • noConflict() 方法 ...其他一些 JavaScript 框架包括:MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。 其中某
  • 开源web框架 JavaScript MVC框架和库 (JavaScript MVC Frameworks and Libraries ) This is an area that is very interesting but also very not-yet-baked. In the DOM manipulation and CSS selector space, ...
  • jQuery - noConflict()方法 一、如何在页面上同时使用 jQuery 和其他框架?jQuery 和其他 JavaScript 框架正如您已经了解到的,jQuery 使用 $ ...其他一些 JavaScript 框架包括:MooTools、Backbone、Sammy、Cap...
  • python之web框架django

    2020-07-05 22:37:36
    Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架,前者的代表有Struts和Spring MVC等,后者的成员则有JSF、...
  • 如何在页面上同时使用 jQuery 和其他框架 ...其他一些 JavaScript 框架包括:MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman...
  • 框架JavaScript

    2015-11-25 00:00:00
    JavaScript框架提供了许多功能,它不是在所有的,他们正在变得越来越流行不足为奇。 他们是强大的,并不难掌握。 一般情况下,我们使用他们的大而复杂的应用程序,但在某些情况下也较小。 已经学会了如何使用框架...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 659
精华内容 263
热门标签
关键字:

sammy框架