目錄
基于laravel4.2的相关架构设计,laravel4.2架构设计
1异常处理
2日志记录
3任务队列
4 Filter
5环境切换
什是软件系统架构设计
什是基于B/S架构的系统设计
首頁 php教程 php手册 基于laravel4.2的相关架构设计,laravel4.2架构设计

基于laravel4.2的相关架构设计,laravel4.2架构设计

Jun 13, 2016 am 09:23 AM
架構設計

基于laravel4.2的相关架构设计,laravel4.2架构设计

项目组不久前引进了laravel框架,本人参与了laravel的调研和项目架构设计。个人认为项目架构中基于laravel的有些设计还是比较实用和有借鉴性的,现将一些设计分享给大家,希望能和大家共同学习和探讨。特别说明,本文并非对lavarel官方文档的摘抄或总结。

1异常处理

1.1异常类

异常类统一放在app/lib/exception下,可以根据业务模块再细分,对简写的异常类可采用一个文件多个异常类的形式,如:

class HttpRequestException extends Exception

{

}

class HttpResponseException extends Exception

{

}

1.2捕获机制

可以在任意需要的地方做异常捕获,如果不捕获,异常将抛出至最外层。

抛出到最外层的异常,统一在app/start/global.php文件中定义handler

function handleException($code, $exception)

{

return Decorate::failed($code, null, $exception->getFile() . ':' . $exception->getLine() . ',' . $exception->getMessage());

}

App::error(function(HttpRequestException $exception, $code)

{

return handleException(-1007, $exception);

});

App::error(function(HttpResponseException $exception, $code)

{

         return handleException(-1008, $exception);

});

1.3抛出机制

可在任意可触发异常的地方,抛出异常。

RequestLog::request($url, $data, $start, $content);

if (!$content) {

throw new HttpRequestException($url . ':' . $data);

}

2日志记录

分三类log:接口调用log(RequestLog)、业务log(LogicaltLog)、调试log(DebugLog)。日志统一放在app/lib/log目录下。其中RequestLog可用于接口调用的统计分析,LogicaltLog可以用于记录逻辑数据,DebugLog用于输出调试信息(也可直接用laravel自带的\Log类)。

3任务队列

Laravle封装了Queue用来做任务队列,用来做异步处理非常方便。支持: "sync", "beanstalkd", "sqs", "iron", "redis"五种形式。建议用redis,超级好用。

队列使用方法只要将任务类的类名压入队列,并且该任务类实现了fire方法,就可以使用了。

在fire($job, $data)里,我们还可以拿到任务的尝试次数$job->attempts() ,可以延迟任务响应时间$job->release(30);还可以删掉任务$job->delete();。

最后特别提醒,可以通过laravel框架的artisan工具启动队列监听:

php ../../../../artisan --env=devqueue:listen&

4 Filter

Filter可以用来做参数验证、登陆态检查、接口调用日志。

4.1参数检查

在app /config/param.php里定义各接口的参数验证条件。验证条件自行参考laravel文档。

然后在app /Filter.php的Before里,对每一个调用进行参数验证,如:

App::before(function($request))

{

$res = Param::verification(Input::all(), $standard);

}

4.2接口调用日志

App::after(function($request, $response)

{

RequestLog::log($request, $response);

});

5环境切换

通常,我们的框架会有好几套环境:正式、测试、本地、沙盒等,不同的环境配置肯定会有不同。Laravel允许在进程start的时候,指定当前配置环境,从而做到不同环境之间的自动切换。

1)  不同的环境配置目录:

app\config\dev

app\config\formal

app\config\local

2)bootstrap/start.php指定需要的环境,例如测试环境dev

$env = $app->detectEnvironment(‘dev’)

3)  如何自动切换?

我们可以做到根据接口请求访问的域名不同,指定相应的环境。比如dev.domain.com为测试环境,domain.com为正式环境。

 

什是软件系统架构设计

  软件架构(software
  architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系
  统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向
  对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。
  软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。
  软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。
  在“软件构架简介”中,David Garlan 和 Mary Shaw
  认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结
构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。
  但构架不仅是结构;IEEE Working Group
  on Architecture 把其定义为“系统在其环境中的最高层概念”。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注
重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。
  在Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。
  从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管
  理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑
和流程。
  一般而言,软件系统的架构(Architecture)有两个要素:
  它是一个软件系统从整体到部分的最高层次的划分。
  一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。
  详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。
  所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和
联结器完成某一项需求。
  建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。
  建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。
 

什是基于B/S架构的系统设计

第一、什么是C/S结构。

C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系
统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。

第二、什么是B/S结构。

B/S(Browser/Server)结构即浏览器和服务器结构。它是随着
Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端
(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

以目前的技术看,局域网建立B/S结构的网络应
用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地
点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服
务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。

第三、管理软件主流技术。

管理软件技术的主流技术与管理思想一样,也经历了三个发展时期。首先,界面技术从上世纪DOS字符界面到Windows图形界面(或图形用户界面GUI),直至Browser浏览器界面三个不同的发展时期。其次,今天所有电脑的
浏览器界面,不仅直观和易于使用,更主要的是基于浏览器平台的任何应用软件其风格都是一样的,使用人对操作培训的要求不高,而且软件可操作性强,易于识
别;再者,平台体系结构也从过去单用户发展到今天的文件/服务器(F/S)体系、客户机/服务器(C/S)体系和浏览器/服务器(B/S)体系。

二、C/S和B/S之比较

C/S和B/S是当今世界开发模式技术架构的两大主流技术。C/S是美国Borland公司
最早研发,B/S是美国微软公司研发。目前,这两项技术以被世界各国所掌握,国内公司以C/S和B/S技术开发出产品也很多。这两种技术都有自己一定的市
场份额和客户群,各家企业都说自己的管理软件架构技术功能强大、先进、方便,都能举出各自的客户群体,都有一大群文人墨客为自己摇旗呐喊,广告满天飞,可
谓仁者见仁,智者......余下全文>>
 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MongoDB與邊緣運算的結合實作與架構設計 MongoDB與邊緣運算的結合實作與架構設計 Nov 02, 2023 pm 01:44 PM

隨著物聯網和雲端運算的快速發展,邊緣運算逐漸成為新的熱點。邊緣運算是指將資料處理和運算能力從傳統的雲端運算中心轉移到實體設備的邊緣節點上,以提高資料處理的效率和減少延遲。而MongoDB作為一種強大的NoSQL資料庫,其在邊緣運算領域的應用也越來越受到重視。一、MongoDB與邊緣運算的結合實務在邊緣運算中,設備通常具有有限的運算與儲存資源。而MongoDB

Golang RabbitMQ: 實現高可用的訊息佇列系統的架構設計與實現 Golang RabbitMQ: 實現高可用的訊息佇列系統的架構設計與實現 Sep 28, 2023 am 08:18 AM

GolangRabbitMQ:實現高可用的訊息佇列系統的架構設計和實現,需要具體程式碼範例引言:隨著網路技術的不斷發展和應用的廣泛,訊息佇列成為了現代軟體系統中不可或缺的一部分。作為實現解耦、非同步通訊、容錯處理等功能的工具,訊息佇列為分散式系統提供了高可用性和擴充性的支援。而Golang作為一種高效、簡潔的程式語言,廣泛應用於建構高並發和高效能的系統

go-zero架構設計模式及最佳實踐 go-zero架構設計模式及最佳實踐 Jun 22, 2023 pm 12:07 PM

隨著網路的快速發展,軟體開發變得越來越複雜。為了因應這項挑戰,軟體架構也不斷演進,從最初的單體應用,到微服務架構。而隨著微服務架構的普及,越來越多的開發者開始採用gRPC作為微服務之間的通訊協定。 go-zero就是一套基於gRPC建構的微服務架構。本文將介紹go-zero的架構設計模式及最佳實務。一、go-zero框架架構圖1:go-zero框架架構如圖1

商城SKU管理模組的架構設計與PHP程式碼實現 商城SKU管理模組的架構設計與PHP程式碼實現 Sep 12, 2023 pm 03:18 PM

商城SKU管理模組的架構設計與PHP程式碼實現一、引言隨著電子商務的快速發展,商城的規模與複雜性也日益增加。商城的SKU(StockKeepingUnit)管理模組是商城的核心模組之一,負責管理商品的庫存、價格、物業等資訊。本文將介紹商城SKU管理模組的架構設計與PHP程式碼實作。二、架構設計資料庫設計SKU管理模組的資料庫設計是整個架構的基礎。商城的SKU

大型專案中基於PHP框架的架構設計 大型專案中基於PHP框架的架構設計 Jun 03, 2024 pm 12:34 PM

大型PHP專案可採用基於框架的架構設計,如分層架構或MVC架構,以實現可擴充性、可維護性和可測試性。分層架構包括視圖層、業務邏輯層和資料存取層;MVC架構將應用程式劃分為模型、視圖和控制器。實施框架架構可提供模組化設計,方便添加新功能、降低維護成本並支援單元測試。

良好架構:使用Go語言建構高擴展性分散式系統 良好架構:使用Go語言建構高擴展性分散式系統 Jun 18, 2023 pm 02:32 PM

作為一款高效能的程式語言,Go語言在分散式系統的建置中非常流行。它的高速度和極低的延遲時間讓開發人員更容易實現高擴展性的分散式架構。在建構分散式系統前,需考慮的架構問題非常繁瑣。如何設計出更易於維護、可擴展且穩定的架構是所有分散式系統開發者面臨的重要問題。使用Go語言來建立分散式系統,可以使這些架構選擇變得更加簡單和明確。高效率的協程Go語言天生支持協程,

如何設計一個高效能的PHP微服務架構 如何設計一個高效能的PHP微服務架構 Sep 24, 2023 pm 04:37 PM

如何設計一個高效能的PHP微服務架構隨著網際網路的快速發展,微服務架構成為了許多企業建構高效能應用的首選。作為一種輕量級、模組化的架構風格,微服務可以將複雜的應用拆分成更小的、獨立的服務單元,透過相互協作提供更好的擴展性、可靠性和可維護性。本文將介紹如何設計一個高效能的PHP微服務架構,並提供了具體的程式碼範例。一、拆分微服務在設計高效能的PHP微服務架構前,

PHP防火牆實作:網站安全架構設計指南 PHP防火牆實作:網站安全架構設計指南 Jun 30, 2023 pm 06:57 PM

網站安全架構設計指南:PHP防火牆的實現引言:在現今的互聯網時代,網站安全問題日益嚴峻,不斷有駭客利用漏洞入侵網站,盜取用戶資訊或破壞網站正常運作。為了保護網站及其使用者的隱私和安全,建立一個可靠的安全架構是至關重要的。本文將重點放在PHP防火牆的實現,為網站安全架構提供指導。一、什麼是PHP防火牆? PHP防火牆是一種屏蔽惡意攻擊和入侵的安全措施,它透過過濾

See all articles