ChatGPT 与软件架构 (1) - 快速原型

简介: ChatGPT 与软件架构 (1) - 快速原型

通过 ChatGPT 生成设计和原型代码,可以帮助团队快速启动项目,验证想法,提高效率。原文: ChatGPT and Software Architecture


Surfing Croyde Bay @Unsplash


OpenAI 的 ChatGPT 现在越来越火,出现了各种有趣用例。


从许多方面来看,ChatGPT 都可以看作是 AI 赋能的架构师白板,除了画画线条和框框,还可以有许多用途。我在本文中将演示如何基于 ChatGPT 启动软件架构流程。


就像在白板上画画一样,过程会有点混乱,各种因素相互作用会导致不得不通过不断修改来找到最佳答案。本文旨在演示成功使用 ChatGPT 的一些提问技巧,这些技巧产生了真正有价值的结果。


需要注意,ChatGPT 仍在学习中,所以不要对一致性有太大期望,多次问同样的问题可能会得到不同的结果。


设置 ChatGPT 帐户很简单,可以按照官方文档完成: https://openai.com/blog/chatgpt/

用户故事

我们从要求 ChatGPT 写用户故事开始。



写一个用户故事,测量员登录到系统,输入地理空间坐标、建筑、建筑类型和特征信息,这是他们一天中要进行的许多调查中的一个


如你所见,这是个特定行业的用户故事。ChatGPT 拥有庞大的知识库,需要通过实验来了解 ChatGPT 的知识深度,即它知道些什么?


第一个问题的关键是要对关键细节非常明确,以获得最佳结果。这样,ChatGPT 可以响应一组体面的结果,如下所示:



如果获得的结果与上述类似,那就意味着 ChatGPT 已经找到了线索,并将根据进一步提出的问题进行构建。要记住的关键是,以下所有结果都将基于这个初始上下文,因此值得花时间定义第一个交互。


现在可以做些非常了不起的事情,构建数据库!

构建数据库


在 markdown 中以表格格式详细生成数据模型


ChatGPT 是这样回应的:



不止如此,我们继续…



生成 SQL


CREATE TABLE Surveyors (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);
CREATE TABLE Buildings (
    id INT NOT NULL AUTO_INCREMENT,
    type_id INT NOT NULL,
    coordinates VARCHAR(255) NOT NULL,
    notes TEXT,
    surveyor_id INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (type_id) REFERENCES BuildingTypes(id),
    FOREIGN KEY (surveyor_id) REFERENCES Surveyors(id)
);
CREATE TABLE BuildingTypes (
    id INT NOT NULL AUTO_INCREMENT,
    type VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);

复制代码


ChatGPT 输出了完全可用的 SQL,可以顺利创建 SQL 数据库。不止如此……

创建类图


<script src="https://cdn.jsdelivr.net/npm/mermaid@8.6.0/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>
<div class="mermaid">
    classDiagram
    class Surveyors {
        +id: int
        +name: string
        +email: string
        +password: string
    }
    class Buildings {
        +id: int
        +type_id: int
        +coordinates: string
        +notes: string
        +surveyor_id: int
    }
    class BuildingTypes {
        +id: int
        +type: string
    }
    Surveyors --> Buildings
    Buildings --> BuildingTypes
</div>

复制代码


ChatGPT 生成的类图如下所示…



ChatGPT 真是让人惊喜:




ChatGPT 没法显示图表,但可以生成能够创建图表的 Mermaid 代码。ChatGPT 非常熟悉 Mermaid 脚本,可以生成这种脚本语言支持的图表。


由此可见,ChatGPT 已经学会了编码,可以继续要求 ChatGPT 编写 JavaScript、CSS 和 HTML,通过简单的请求将原型组合在一起。ChatGPT 经过训练,可以用许多流行的编程语言生成代码。


如果有足够的时间,每个有经验的人都可以做到,只不过速度要慢一些。但这不是生产代码,要使代码达到生产质量和可用性水平,还需要做更多工作。不过 ChatGPT 已经很让人惊艳了。


我们尝试用 ChatGPT 来提高代码质量:



生成遵循 C#实践原则的类设计,包含错误处理和数据库访问层


ChatGPT 的响应:


public class Surveyor
{
    private readonly string _name;
    private readonly string _email;
    private readonly List<ISurvey> _surveys;
    private readonly IDatabaseAccess _databaseAccess;
    public Surveyor(string name, string email, IDatabaseAccess databaseAccess)
    {
        _name = name;
        _email = email;
        _databaseAccess = databaseAccess;
        _surveys = new List<ISurvey>();
    }
    public void AddSurvey(ISurvey survey)
    {
        try
        {
            _surveys.Add(survey);
            _databaseAccess.SaveSurvey(survey);
        }
        catch (Exception ex)
        {
            // Log the error
        }
    }
    public void RemoveSurvey(ISurvey survey)
    {
        try
        {
            _surveys.Remove(survey);
            _databaseAccess.DeleteSurvey(survey);
        }
        catch (Exception ex)
        {
            // Log the error
        }
    }
    public List<ISurvey> GetSurveys()
    {
        try
        {
            return _databaseAccess.GetSurveys();
        }
        catch (Exception ex)
        {
            // Log the error
            return new List<ISurvey>();
        }
    }
}
public interface IDatabaseAccess
{
    void SaveSurvey(ISurvey survey);
    void DeleteSurvey(ISurvey survey);
    List<ISurvey> GetSurveys();
}
public class DatabaseAccess : IDatabaseAccess
{
    public void SaveSurvey(ISurvey survey)
    {
        // Implementation for saving the survey to a database
    }
    public void DeleteSurvey(ISurvey survey)
    {
        // Implementation for deleting the survey from the database
    }
    public List<ISurvey> GetSurveys()
    {
        // Implementation for retrieving a list of surveys from the database
    }
}
public interface ISurvey
{
    decimal Latitude { get; set; }
    decimal Longitude { get; set; }
    string BuildingType { get; set; }
    Dictionary<string, string> BuildingCharacteristics { get; set; }
}
public class Survey : ISurvey
{
    public decimal Latitude { get; set; }
    public decimal Longitude { get; set; }
    public string BuildingType { get; set; }
    public Dictionary<string, string> BuildingCharacteristics { get; set; }
    public Survey(decimal latitude, decimal longitude, string buildingType, Dictionary<string, string> buildingCharacteristics)
    {
        Latitude = latitude;
        Longitude = longitude;
        BuildingType = buildingType;
        BuildingCharacteristics = buildingCharacteristics;
    }
}

复制代码


作为一组脚手架类,非常不错了。


接下来让 ChatGPT 为 RESP API 创建 Swagger,ChatGPT 再次返回了足以启动开发的不错成果。


结论

ChatGPT 功能广泛,可以帮助启动开发,但还无法实现比较深度的工作。每个回合都必须靠人来激发 ChatGPT 完成任务,缺乏主动性,需要有人发起并推动接下来的步骤。


不过可以开发一组标准问题,促使 ChatGPT 提供好的结果,也许足以帮助团队以多种方式开始开发。




你好,我是俞凡,在 Motorola 做过研发,现在在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。微信公众号:DeepNoMind

目录
相关文章
|
6月前
|
存储 人工智能 架构师
ChatGPT 与软件架构 (4) - 架构师提示工程指南
ChatGPT 与软件架构 (4) - 架构师提示工程指南
75 0
|
6月前
|
存储 人工智能 架构师
ChatGPT 与软件架构 (2) - 基于 Obsidian 和 GPT 实现解决方案架构自动化
ChatGPT 与软件架构 (2) - 基于 Obsidian 和 GPT 实现解决方案架构自动化
128 0
|
6月前
|
人工智能 监控 安全
ChatGPT 与软件架构 (5) - 网络安全
ChatGPT 与软件架构 (5) - 网络安全
57 0
|
6月前
|
人工智能 监控 架构师
ChatGPT 与软件架构 (3) - 软件架构提示工程
ChatGPT 与软件架构 (3) - 软件架构提示工程
86 0
|
2天前
|
存储 监控 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第9天】 在本文中,我们将深入探讨如何在后端开发中构建一个高效的微服务架构。通过分析不同的设计模式和最佳实践,我们将展示如何提升系统的可扩展性、弹性和维护性。我们还将讨论微服务架构在处理复杂业务逻辑和高并发场景下的优势。最后,我们将分享一些实用的工具和技术,以帮助开发者实现这一目标。
|
3天前
|
API 持续交付 开发者
构建高效微服务架构:后端开发的新视角
【5月更文挑战第8天】 随着现代软件开发的演变,微服务架构已经成为了企业追求敏捷、可扩展和灵活部署的重要解决方案。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术栈选择以及持续集成与部署的最佳实践。我们还将讨论微服务带来的挑战,如数据一致性、服务发现和网络延迟,并提出相应的解决策略。通过本文,后端开发者将获得构建和维护微服务系统所需的深度知识,并了解如何在不断变化的技术环境中保持系统的健壮性和可维护性。
36 8
|
20小时前
|
监控 数据库 开发者
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第11天】在当今软件开发的世界中,微服务架构已经成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了设计、部署和维护微服务系统时面临的挑战,并提出了一系列实用的策略和最佳实践。我们将从服务的划分原则出发,讨论如何确保每个微服务的自治性,以及如何通过容器化和编排技术实现服务的高效运行。文章还将涉及监控、日志记录和故障恢复的策略,旨在帮助开发人员构建一个既高效又可靠的微服务环境。
|
1天前
|
监控 持续交付 Docker
使用Docker进行微服务架构的最佳实践
【5月更文挑战第10天】本文探讨了使用Docker实施微服务架构的最佳实践。首先,理解微服务架构是拆分小型独立服务的模式,借助Docker实现快速部署、高可移植性和环境一致性。Docker的优势在于服务扩展、容器编排、自动化构建与部署。最佳实践包括:定义清晰服务边界,使用Dockerfile和Docker Compose自动化构建,利用Docker Swarm或Kubernetes编排,实施服务发现和负载均衡,监控与日志记录,以及持续集成和持续部署。Docker虽重要,但需与其他技术结合以确保系统整体稳定性。
|
1天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。