草庐IT

<AppML> 架构

runoob 2023-04-06 原文

<AppML> 架构


MVC 架构

 

<AppML> 采用了 MVC 架构。

MVC 全名是 Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范。

模型(Model) 描述你的应用。

视图(View) 显示你的数据。

制器(Controller) 控制你的应用。

 

Wikipedia: Model, View, Controller

 

       

模型(MODEL) - 仅仅是一个简单的XML文件

模型描述了您的应用程序,并且可在不同的硬件和软件平台(PC、iPhone、Tablets 等)重复使用。它不关心用户界面(UI)或表现形式。

模型采用xml编写,存储于web服务器中。

<appml>

<datasource>
  <database>
    <connection>Northwind</connection>
    <sql>SELECT CustomerName,ContactName,City,Country FROM Customers</sql>
  </database>
</datasource>

<filters>
<query>
  <field label="Customer">CustomerName</field>
  <field>City</field>
  <field>Country</field>
</query>
<order>
  <field label="Customer">CustomerName</field>
  <field>City</field>
  <field>Country</field>
</order>
</filters>

</appml>

以上实例定义了数据源来自 Northwind 数据库。

该模型允许使用预定义的 SQL 获取数据。它还允许通过 Customer、City 和 Country 查询数据和排序。


视图(VIEW) - 仅仅是一个普通的 HTML 文件

视图即是 UI(User Interface:用户界面)。它通常是一个显示和输入数据(可选)HTML 页面:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="appml.css" />
</head>
<body>

<h1>My First Web Application</h1>
<div id="Place01"></div>

<script src="appml.js"></script>
<script>
customers=new AppML("appml.html","Customers.xml");
customers.run("Place01");
</script>

</body>
</html>

以上 HTML 页面使用通过执行脚本语言创建一个 AppML 对象,并将数据显示在 id="Place01" 的 div 中。

采用了 "appml.js" 脚本文件。


CONTROLLER(控制器) - 仅仅是一个浏览器很服务端的脚本

服务端脚本通过以下方式控制应用:

  • 从浏览器中接收请求数据
  • 将模型和数据返回给浏览器
  • 从浏览器中接收更新数据
  • 在服务器上更新数据
  • 数据通信过程,请进行数据安全验证。

浏览器脚本通过以下方式控制应用:

  • 当页面加载时,你可以加载<AppML> 控制器到页面上。
  • 使用控制器,你可以在页面创建 <AppML> 对象。
  • 当执行 <AppML> 对象时, 它会向服务器请求数据。
  • <AppML> 对象从服务器接受数据(使用数据模型)。
  • <AppML> 对象(或者你的代码)在页面中显示你的数据。
  • (可选)web用户修改数据。
  • (可选)<AppML> 可以向服务器发送修改请求。

典型的 Web 文件和文件夹:


web文件夹:Demo

数据文件夹:Data

图片文件夹:Images

模型文件夹: Models

应用:Demo.htm

样式:Demo.css

<AppML> 配置文件:appml_config.php (或者 .htmlx)

<AppML> 样式文件:appml.css

<AppML> 浏览器控制器:appml.js

<AppML> 服务器控制器:appml.php (或者 .htmlx)


快速、灵活的应用开发

快速应用开发(Rapid Application Development、RAD)不仅是一种需求抽取方法,它还是是软件开发为一体的方法。快速应用开发目的是快速发布系统方案,而技术上的优美相对发布的速度来说是次要的。

<AppML> 提供超快速的原型设计,比传统的软件开发方法高100倍的速度。

应用程序原型可以直接从应用程序模型运行,无需任何编码。

Wikipedia: Rapid Application Development

敏捷软件开发是基于用户和开发者相互协作的基础上一步一步的基发展而来的方法。

<AppML> 应用从原型到完整的应用可以通过递增的方式一步步来编写实现。

Wikipedia: Agile Software Development


声明式编程

软件开发往往无法按照预期的时间和预算完成。软件编码错误也是经常出现。 这是因为计算机代码是很难开发、测试、维护。

编码已经过时了。你应该更多描述做什么,而不是如何实现它。

使用 <AppML> 你需要在模型中声明你的应用 。

使用 <AppML> 可以少写或者不用编写代码

Wikipedia: Declarative Programming


代码先行(Code First)

Web应用程序开发可以使用以下两种不同的方式:

1. 代码先行(Code First):使用预编程,预先测试的代码,只增加新的应用程序说明。

2. 契约优先(Contract First):从头开始使用完整的应用程序的说明要求编写应用程序。

<AppML> 采用最合理的概念: 代码先行(Code First)


面向服务的体系结构(service-oriented architecture,SOA)

Web Service 是一个数据接口,通过URL指定,就像一个web页面。 但它有别于web页面,它只是一种传达信息的方式。

一个典型的 Web Service 为页面提供了数据。

使用 <AppML>,HTML 显示为用户界面,<AppML> 提供数据。

Original Web Services 设计使用了 XML 标志如 SOAP、WSDL 和 UDDI。

Modern Web Services 比如 <AppML> 应用更加简单。

  • 更容易理解 - 可以被我们阅读
  • 轻量级 - 没有不必要的代码或标记
  • 易于实施 - 没有所需的开发工具

面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。


Web Services的优势

  • Web services 只需要少量的代码
  • Web services 被设计来处理一组有限的任务
  • Web services 使用基于HTTP的通信协议
  • Web services 独立于操作系统
  • Web services 独立于编程语言
  • Web services 可以连接不同的应用程序,系统和设备
  • Web Services 可以很容易地发布信息
  • Web Services 有利于快速应用程序开发

例如一个Web services,可以设计一个小程序,提供其他最新的股票的交易价格的应用程序。

Web services使用HTTP协议与其他系统进行通信,Web服务是独立于操作系统和编程语言。

调用Web services的应用程序将始终使用HTTP协议发送请求。调用应用程序将永远不会关心其他计算机运行的操作系统或编程语言。

Web services可以为更多的企业创造新的可能性,因为它提供了一种简单的分发大量信息的方式。

比如:航班时刻表和机票预定系统。


云计算(Cloud Computing)

云计算(Cloud Computing)是SOA的扩展:应用即服务(Application-as-a service),存储即服务(Storage-as-a-service),数据即服务(Data-as-a-service)。

对于大多数人,云计算是在web上存储数据:

  • 邮寄很日历
  • 文档和电子表格
  • 书籍、笔记、待办事项列表
  • 音乐、图片和电影
  • 数据库和应用程序

原因很明显:

  • 有来自世界各地的访问数据
  • 与他人分享我的数据
  • 硬件升级或者崩溃

<AppML> 可以很轻松地将数据库和应用程序放在云中。

有关<AppML> 架构的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  3. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  4. ruby-on-rails - 没有参数的 `<<`(小于两倍)是什么意思? - 2

    我在一个我想在formtasticGem中覆盖的方法中找到了这个。该方法如下所示:defto_htmlinput_wrappingdohidden_field_html是什么意思?在第三行做什么?我知道它对数组有什么作用,但在这里我不知道。 最佳答案 你可以这样读:hidden_field_htmllabel_with_nested_checkbox是连接到hidden_​​field_html末尾的参数-为了“清晰”,他们将其分成两行 关于ruby-on-rails-没有参数的`

  5. ruby-on-rails - 找不到 gem railties (>= 0.a) (Gem::GemNotFoundException) - 2

    我已经看到了一些其他的问题,尝试了他们的建议,但没有一个对我有用。我已经使用Rails大约一年了,刚刚开始一个新的Rails项目,突然遇到了问题。我卸载并尝试重新安装所有Ruby和Rails。Ruby很好,但Rails不行。当我输入railss时,我得到了can'tfindgemrailties。我当前的Ruby版本是ruby2.2.2p95(2015-04-13修订版50295)[x86_64-darwin15],尽管我一直在尝试通过rbenv设置ruby​​2.3.0。如果我尝试rails-v查看我正在运行的版本,我会得到同样的错误。我使用的是MacOSXElCapitan版本10

  6. ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe? - 2

    考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://

  7. Ruby -> 写入二维数组 - 2

    我正在处理http://prepwork.appacademy.io/mini-curriculum/array/中概述的数组问题我正在尝试创建函数my_transpose,它接受一个矩阵并返回其转置。我对写入二维数组感到很困惑!这是一个代码片段,突出了我的困惑。rows=[[0,1,2],[3,4,5],[6,7,8]]columns=Array.new(3,Array.new(3))putscolumns.to_s#Outputisa3x3arrayfilledwithnilcolumns[0][0]=0putscolumns.to_s#Outputis[[0,nil,nil],[

  8. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  9. ruby - 为什么必须明确指定 2 个参数才能 curry :> - 2

    考虑这个,它工作正常::>.to_proc.curry(2)[9][8]#=>true,because9>8然而,即使>是一个二元运算符,如果没有指定的元数,上面的代码将无法工作::>.to_proc.curry[9][8]#=>ArgumentError:wrongnumberofarguments(0for1)为什么两者不等价?注意:我特别想用提供的一个参数创建中间柯里化(Currying)函数,然后然后调用然后用第二个参数调用它。 最佳答案 curry必须知道传入的过程的数量,对吧?:-1来自arity的负值令人困惑,但基本上

  10. ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列? - 2

    在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para

随机推荐