前言:
②版本快速迭代:但是使用者依舊不滿意,繼續對開發人員提出了更多更高的要求,不僅需要高質量的使用者體驗,還要求快速迭代,最好一天出乙個新功能,而且使用者還要求不更新就能體驗到新功能。為了滿足使用者需求,於是開發人員就用h5,reactnative,weex等技術對已有的專案進行改造。
③元件化:專案架構也變得更加的複雜,縱向的會進行分層,網路層,ui層,資料持久層。每一層橫向的也會根據業務進行元件化。
儘管這樣做了以後會讓開發更加有效率,更加好維護,但是如何解耦各層,解耦各個介面和各個元件,降低各個元件之間的耦合度,如何能讓整個系統不管多麼複雜的情況下都能保持「高內聚,低耦合」的特點?
1.引子
大前端react和vue.路由的作用主要是保證檢視和url的同步。當使用者在頁面進行操作的時候,應用會在若干個互動狀態中切換,路由則可以記錄下某些重要的狀態,比如使用者檢視乙個**,使用者是否登入、在訪問**的哪乙個頁面。使用者可以通過手動輸入或者與頁面進行互動改變url,然後通過同步或者非同步的方式向服務端傳送請求獲取資源,成功後重新繪製ui。
3->如何能統一ios和android兩端的頁面跳轉邏輯?甚至如何能統一三端的請求資源的方式?
5->如何在每個元件間呼叫和頁面跳轉時都進行埋點統計?每個跳轉的地方都手寫**埋點?利用runtime aop ?
1->url scheme方式
關於系統功能跳轉的url彙總列表:
2.universal links 方式
具體設定:
2.網域名稱必須要支援https。
在瀏覽器裡面也是一樣的效果,如果是支援了universal links方式,訪問相應的url,會有不同的效果。如下圖:
主要解決:
①各個頁面和元件之間的跳轉問題:
②各個元件之間相互呼叫
**高復用、方便測試
如何設計乙個路由
route實現
主工程與首頁模組、分類、登入模組不直接建立關聯,而是先通過router(路由)與你要呼叫的模組建立關係 ,從而實現各個模組的解耦和復用、
①.octarget_index類(解耦+互動)
#import2.**實現:hkocrouter.hns_assume_nonnull_begin
@inte***ce
octarget_index : nsobject
- (id)action_home:(nsdictionary*)params
;@end
ns_assume_nonnull_end
#import
"octarget_index.h
"#import
@implementation
octarget_index
- (id)action_home:(nsdictionary*)params
@end
#importhkocrouter.mns_assume_nonnull_begin
@inte***ce
hkocrouter : uiview
+(instancetype)shareinstance;
- (id)openurl:(nsstring *)urlstr;
//返回值id,外部呼叫,通過target 和 action 來唯一確認乙個類裡面的方法
- (id)performtarget:(nsstring*)targetname action:(nsstring*)actionname param:(nsdictionary*)params
;@end
ns_assume_nonnull_end
#import使用:"hkocrouter.h
"@implementation
hkocrouter
+(instancetype)shareinstance );
return
mediator;
}- (id)openurl:(nsstring *)urlstr
}nsstring *actionname = [url.path stringbyreplacingoccurrencesofstring:@"
/" withstring:@""
];
if ([actionname hasprefix:@"
native
"])
id result = [self performtarget:url.host action:actionname param:params
];
return
result;
}-(id)performtarget:(nsstring *)targetname action:(nsstring *)actionname param:(nsdictionary *)params
else
else
}}//
1.通過物件呼叫指定的方法
//2.傳參
- (id)safeperformaction:(sel)action target:(nsobject*)target param:(nsdictionary*)params
//獲取這個方法返回值的位址
const
char *rettype =[methodsig methodreturntype];
//id 是可以返回任意物件,所以我們單獨處理基本變數。 nsinteger bool void
if (strcmp(rettype, @encode(nsinteger)) == 0
)
if (strcmp(rettype, @encode(bool)) == 0
) #pragma clang diagnostic push
#pragma clang diagnostic ignored "-warc-performselector-leaks"
return [target performselector:action withobject:target withobject:params
];#pragma clang diagnostic pop}
@end
"];index為元件索引;home為actionname;「:」,冒號表示帶引數.
IOS 元件化的好處
建立pod索引庫,固定寫法,並且定義索引庫的名字為s,後續通過s,就能拿到索引庫 pod spec.new do s 設定名稱 設定版本號 s.version 0.0.1 設定摘要 設定詳情 s.description good 設定倉庫主頁 設定許可證 s.license mit 設定作者 s.a...
iOS元件化方案調研
ios元件化方案探索 一 什麼是元件化?1 什麼是元件?元件 一般來說用於命名比較小的功能塊,如 下拉重新整理元件 提示框元件。而較大粒度的業務功能,我們習慣稱之為 模組 如 首頁模組 我的模組 新聞模組。這次討論的主題是元件化,這裡為了方便表述,下面模組和元件代表同乙個意思,都是指較大粒度的業務模...
iOS 元件化(OC篇)
網上關於元件化的理論很多而且已經比較成熟,理論方面請參看這篇集合文章ios元件化。1 要元件化必須進行解耦。我們談解耦,並不是完全解除 之間的耦合,通過學習和實踐這是不合理也不可能的。我們解耦的目的其實是為了解除 模組相互間的依賴,或者說我們的目的就是讓 模組變得單向依賴,像乙個插頭一樣可以自由拔插...