2022/06/26 (新增連結)
一般而言,組織都會有既定的開發平台(工具/語言),專案通常都是依循組織的規劃。那組織如何決定開發平台呢? 一般而言,會考慮幾個因素:
組織既有的開發平台
主要的原因是希望不要花太多時間重新學習新的平台,學習新的平台,對組織及程式設計師而言,是個降低生產力的事。所以,如果組織過去都使用Java為開發語言,在評估mobile的開發時,會傾向使用Android+Java,或者與Java接近的JavaScript為平台(如:React Native)。當組織過去都使用C#為開發語言,在評估mobile的開發時,就會考慮以c#為基礎的Xamarin。
外界的資源
即使是跟現有使用的平台很類似,新的平台也會帶來新的問題,所以,是否能取得資源就是一個很重要的評估因素。一般而言,越多人使用的平台,資源就越多,例如,討論區中會有很多的討論,也會有很多有經驗的開發者回答問題,也會有很多人在blog分享經驗,也會有很多人在github分享範例程式。
相關工具的取得也是很重要的,當專案需要很多程式設計師同時工作時,所選用的平台就必須有版本管理工具(如:git)來配合。
人才的獲得
組織也必須考慮到人才的獲得,所以,有些組織會被迫換開發平台,會因為越來越難獲得相關的人才。
5 Key Principles of Software Architecture
The SOLID principles (1)
Single Responsibility Principle
Open-Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
The Least principles
The principle of Least Astonishment / Least Surprise (2)
The principle of Least Effort / Zipf's law (3)
The principles of Economics
The principle of Opportunity Cost (4)
The principle of Last Responsible Moment / Cost of Delay (5)
Hexagonal Architecture, there are always two sides to every story
Scale
How your apps are designed to manipulate you
Dark patterns
Gambling for loot
Gamification of KPIs
Anti opt-out
The path to Digital Wellbeing
Misdirection
Obstruction
Sneaking
Urgency
Social Proof / Scarcity
Demeter’s Law: Don’t talk to strangers!: Software Engineering Principles
3 Common Software Architecture Patterns and When To Use Them
Layered (n-tier) architecture
Microservices architecture
Monolithic Architecture
Software Architecture Patterns: 4 minute read
Layered architecture
Event-driven architecture
Microkernel architecture (or Plugin architecture)
Microservices architecture
Space-based architecture (or Cloud architecture pattern)
Architecting Distributed Systems: The Importance of Idempotence
10 Software Architecture Patterns in Enterprise Software Development
A Primer on Architectural Patterns : The Top 7 Software Architecture Patterns You Need To Know
CQRS
Tools
Document
C4 model — a better way to visualise software architecture
Context diagram
Container diagram
Component diagram
Code
Clean Architechture
JavaScript library
jQuery (JQuery UI, JQuery Mobile)
前端框架
Bootstrap (CSS + javascript)
Foundation
Semantic UI
使用者介面框架
React (based on JavaScript)
Vue (based on JavaScript)
AngularJS (Agular 1 / JavaScript)
Angular 2, 4 (rewite in TypeScript)
Angular 5 (supports PWA)
應用框架
ASP.net MVC (c#)
.net on Azure (有學生專案:https://azure.microsoft.com/zh-tw/free/students/#free-products-section)
虛擬機、SQL server、App Service
Django (Python)
Laravel (PHP)
程式語言 / 開發平台
Java
Java + spring framework (詳參: Web Programming)
c#
PHP
Javascript
Node.js (後端) & React.js (前端)
Python
python + django
ㄧ般都是使用Apple提供的XCode + Swift (詳參:The Big List of iOS App Development Tools),可以利用Sketch進行畫面設計,並export給XCode (詳參: Build an iOS App: From Sketch to the App Store),或者使用XCode內建的Interface Builder 。
Kotlin
Realm:明年底Kotlin將取代Java成為Android平台上最受歡迎的語言 (2017/10/16)
Kotlin vs. Java
Kotlin vs. Swift
Java
ㄧ般使用Android Studio(based on IntelliJIDEA)或Eclipse,介面設計建議使用Android Studio的Layout Editor (詳參: Build a UI with Layout Editor)
可使用firebase、App Engine或Compute Engine
React native (based on Javascript, flexbox) (詳參: What are the main differences between ReactJS and React-Native?)
iOS, Android, Web, React native
Xamarin: Ruby, C#
Progressive Web Apps (PWA) (詳參:Progressive Web Apps)
比較常用的有Oracle database, SQL server, MySQL。
NoSQL (non SQL, non relational 或 not only SQL)不是一個產品,而是個概念,泛指不支援SQL的資料庫或非關聯性資料庫,這樣的資料庫通常不需要是先定義的資料欄位 (詳參: NoSQL Database Doesn’t Mean No Schema / 以MongoDB為例, Firebase Data Modeling, Structuring your Firebase Data correctly for a Complex App) 。
Firebase realtime database (JSON Object, realtime database) (詳參:Structure Your Database)
Firebase除了是個No SQL的資料庫之外,還提供雲端平台,可以利用瀏覽器管理資料庫,也提供API讓開發者可以直接在Android、iOS或利用JavaScript存取資料。
Google Cloud Firestore (Beta) (資料以文件的形式儲存,以集合的方式組織) (詳參: Cloud Firestore Data Model)
Firestore可以說是Firebase realtime database的昇級版
Cloud Firestore 增加了 Collection 概念。資料庫的 Root 為多個 Collection,每個 Collection 可裝載多個 Document,每個 Document 實體中也可包含 Collection
Cloud Firestore 支援了更多資料格式,比如:object, array, geopoint, reference。其中 reference 可指定到特定節點的 Document 實體
Cloud Firestore 可自定義 index,支援 multi-key index。可以簡易做到混合(compound)的排序(sorting)和條件過濾(filtering)