软件工程第一步-提升软件生产效率(一个CURD生成器的实现)

文章讨论了如何优化软件开发过程,强调降低生产成本以提高效率。作者提出,通过自动化工具如代码生成器(例如用于CURD操作)可以显著减少手动编写代码的时间,从而提高产出。此外,文章指出,强制加班并非长久之计,应增加资本投入,比如投资在提高生产力的工具和技术上。作者分享了自己的开发工具,能自动生成增删改查代码,简化开发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无论是使用何种的开发模式,软件的诞生过程就是分析,设计,生产的过程,或者这三个过程的交替进行过程。

那如何获得软件工程的进步。首先要解决的一定是如何降低生产成本(即减低相同代码量的书写时间)。

在降低生产成本后,才有可能将之前没时间实现的功能有时间去实现。才能有时间去加强系统设计。

比如。订单最好有个审批过程日志表,这对之后排查问题或形成报表都是有利的,这是显而易见的。

但是如果成本降不下来,那么开发人员会本能的拒绝去开发日志表。

不要批评这种想法对或不对,只谈实际情况。强迫开发去做超额内容,反感与拒绝是肯定会出现的,嘴上不说不等于没有。

因为这耗费时间,尤其是时间紧迫的时候,会想先把日志表放一放,放到二期。众所周知,二期,约等于没有。

正式一点说就是:开发成本有限的情况下,产出和效率成反比。

如果想提过产出,管理者首先想到的一般是增加成本,即延长工时,俗称“加班”。

即使是无偿不给钱的加班,其实也是增加了开发成本(开发时间加长了)。

实际上,靠工程师加班这个行为,就是温铁军所说的经济上在没有外部资本投入的情况下,维持经济的方式一般是成批量的投入劳动力(罗斯福新政)。

但这是没有办法的办法,并不是正确的办法,那正确的办法是什么也就清晰可见了。

增加资本投入。提高生产力。来代替大批量的劳动力。

在开发成本不变的情况下,通过拉高效率来实现拉高产出。

问题的解决方式永远应该朝着有利于大众,方便于大众的方向来前进,而不应该靠强制方式来推行。

阿里的开发规范手册写的听好,规定的也很细,但是推行不下去,落实不了。为什么。因为他只有一个插件来校验你写完的代码合不合规,而没有插件来帮助开发人员产出合规的代码。

推行阿里的开发规范这实际上是增加了开发人员的工作量,对开发人员没有任何可见的好处,一定是推行不下去的。

现在比如最基本的单数据库的CURD,

是完全可以实现自动化生成

下面这个是我自己做的一个生产工具。虽然还没有多完善,但是实际上已经帮我解决了很大一部分无趣的劳动。

不需要自己写这部分代码。只需要动动手指点一点,然后在生成的代码里做做必要的修改就行。

之前实现相同的功能需要多少时间,现在大概需要原来的五分之一就可以了。

而且我相信大部分人是会赞同这种方式的,只不过可能嫌我现在的实现方式比较烂而已。

你们要是觉得可用的话。请点几个赞,支持一下。我把插件发出来。

现在的实现内容还比较简单。这个插件的最终目的是:

1,自动生成增删改查代码(单表)

2,规定出表对应实体类,dao类的位置及名称,从而不需要人工指定,maven的代码一定在src下,不会在srb下。没有为什么,就是约定而已。

3,通过一个yml格式的接口描述文件,生成一个 controller 的方法。

4,生成配套的简单增删改查页面。

插件内容:

一,配置数据源

二,生成实体类

三。生成增改查语句,数据不要物理删除。所以不生成delete语句

1,查询

2,插入

3,修改

### 如何实现连接第三方平台API执行CRUD操作并集成到数据库 为了实现与第三方平台API进行CRUD操作并将这些操作的结果存储或读取自数据库,可以采用分层架构设计模式来分离关注点。具体来说: #### 构建服务端逻辑处理模块 创建专门的服务类负责调用外部API完成相应的业务需求。对于每一个HTTP请求方法(GET, POST, PUT, DELETE),都应对应有一个相应的方法去封装对外部资源的操作。 #### 数据访问对象(DAO) 层的设计 DAO层用于定义一组抽象接口以及其实现类,以便于应用程序能够透明地存取持久化数据源而无需关心底层具体的细节[^1]。当涉及到FastAPI和SQLAlchemy组合时,在`sql_app/crud.py`文件内定义的函数即扮演着这样的角色[^3]。 #### 整合Web API客户端库 利用Python社区成熟的HTTP客户端工具如`requests`或者更现代的选择比如`httpx`,构建起通往目标RESTful API路径上的桥梁。这一步骤主要集中在编写异步/同步版本的辅助函数上,它们接受必要的参数作为输入,并返回解析后的响应体给上游组件继续加工使用。 #### 将两者串联起来形成完整的流程链路 最后也是最关键的部分就是让上述提到的不同层次之间建立起联系。每当接收到一个新的来自前端用户的指令后,先由控制器部分接收下来再转发至对应的处理器;后者则会依据实际场景决定是否要发起远程调用获取最新资料更新本地记录集,亦或是单纯查询已有缓存满足即时反馈的要求。 ```python from fastapi import FastAPI, HTTPException import httpx from sqlalchemy.orm import Session from sql_app import crud, models, schemas from sql_app.database import engine, SessionLocal app = FastAPI() models.Base.metadata.create_all(bind=engine) def get_db(): db = SessionLocal() try: yield db finally: db.close() @app.post("/items/", response_model=schemas.Item) async def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)): external_api_url = "https://example.com/api/v1/items" async with httpx.AsyncClient() as client: resp = await client.post(external_api_url, json=item.dict()) if resp.status_code != 201: raise HTTPException(status_code=resp.status_code, detail="Failed to add item via third-party service.") created_item_data = resp.json() new_item_id = created_item_data.get('id') # Assuming the ID from the third party is unique and can be used directly. local_item = schemas.Item(id=new_item_id, **item.dict()) return crud.create_item(db=db, item=local_item) @app.get("/items/{item_id}", response_model=schemas.Item) async def read_item(item_id: int, db: Session = Depends(get_db)): stored_item = crud.get_item(db, item_id=item_id) if not stored_item: external_api_url = f"https://example.com/api/v1/items/{item_id}" async with httpx.AsyncClient() as client: resp = await client.get(external_api_url) if resp.status_code == 404: raise HTTPException(status_code=404, detail="Item not found both locally and remotely.") elif resp.status_code != 200: raise HTTPException(status_code=resp.status_code, detail="Error fetching remote data.") fetched_item_data = resp.json() # Create a schema object using the retrieved data fetched_item_schema = schemas.Item(**fetched_item_data) # Save it into our database for future reference without altering its original state too much crud.create_item(db=db, item=fetched_item_schema) return fetched_item_schema else: return stored_item ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值