instant camera的系統架構

軟件設計的目標

设计是为了让软件在长期更容易适应变化。 — Kent Beck

软件设计的优劣在根本上决定了软件系统的质量。好的设计,可以让系统更容易修改和扩展,不好的设计,却会让人举步维艰

软件设计=模型+规范

软件设计的第一步:分离关注点

第二点:找到一个最小的核心模型

分离关注点

分离关注点总的思路可以归结两点:拆分+归类

需求1:短期内是搭建在现有的vision系统之上,但长期有機會像smart camera一樣工作

支持現有經過vision連接相機 支持以後通過其他程序比如host連接相機 支持以後經過tcpip鏈接相機

需求1意味着我们的系统可以单机,也可以分布式独立运行

需求2:gui可能性

短期内我们没有gui,host来做gui

长期有机会我们有自己的gui

需求3:相机的应用短期内有三个,以后会越来越多

目標。我们的设计要满足短期和长期需求

关注点1:显示层,负责把用户的操作转化为消息,以及把消息转化为gui显示

关注点2:数据传输层,负责在显示层和模型层之间传送消息

关注点3:模型层,负责做事情

模型

一个好的设计,应该找到一个最小的核心模型,所有其他的内容都是在这个核心模型上生长出来的,越小的模型越容易理解,相对地,也越容易保持稳定。比如设计一个http mock服务器,其核心模型为server.request("foo").response("bar"); 一方面表达出预期;另一方面给出返回的结果。

相机通过usb接口连接到device manager。device manager可以是一台pc(比如vision pc或者任意PC),或者一个嵌入式硬件比如树莓派

device manager暴露出REST服务给客户端

客户端编写gui与REST服务通讯

image-20210620235833673

==画图描述该模型在不同硬件结构下的组件图==

接口

所谓接口,它是用户与软件交互的入口,约定了软件通过怎样的方式对外暴露自己的能力。

对外接口:客户端如何使用

建议定义一种类似于REST或者websocket的架构风格,其特点是

举例

列举所有相机 GET http://ip/cameras

查看某一个相机 GET http://ip/cameras/1

修改某一个相机的参数

POST http://ip/cameras/1
{
“mode": "auto_run"
}

优点:Uniform Interface:统一接口,很强的扩展性

缺点:没有callback

对内接口:如何加入新的设备

注册设备,设备自动发现,设备控制,。。。

实现

Powered by Jekyll and Theme by solid

本站总访问量