杂谈 查看公司源码有感

简介: 换了一个新工作,来到新的公司当然最重要的就是要先熟悉公司的业务,我果断了通过tfs下载了公司的一个业务的源码,里面虽然有很多的封装功能我看不到具体实现,但是通过项目的结构我还是发现了一个公司项目能够成功的关键。

   换了一个新工作,来到新的公司当然最重要的就是要先熟悉公司的业务,我果断了通过tfs下载了公司的一个业务的源码,里面虽然有很多的封装功能我看不到具体实现,但是通过项目的结构我还是发现了一个公司项目能够成功的关键。

  公司名我就不说了,说了大家会觉得我有点什么似的?咱就说我通过看公司源码发现了什么,我先说说这个源码项目是做什么的?这个源码是针对公安局进行调度的程序,就是相当于公安局接线员似的,听公司的老人说这个项目的功能,我以为没有什么复杂的,但是我拿到了公司的源码,我的妈呀,吓我一跳,一共有接近六十个项目,就是这一个解决方案中有六十个项目存在。这是我干软件那么长时间,第一次看到一个解决方案竟然需要那么多的项目存在,当然这并没有吓到我,我果断的拿出了纸和笔,把每个项目按照其分层结构以及功能分类,经过我那么一分类,发现其实就是不同分层结构。一共有那么几层存在:

  1. 客户端代理层 CliengAgent
  2. 客户端UI
  3. 客户端逻辑层 Client Logic
  4. 服务端服务层Service
  5. 服务端数据存取层 DAL
  6. 服务端ORM 层 ORM
  7. 数据传输层 DTO
  8. 接口层 Interface

当然这几层是我自己最后总结发现的,经过我这么一总结,我发现其实也就是传说中的分层结构,和我以前做的项目没有什么区别。让我的心里长抒了一口气,下面就是我针对每一层的所实现的功能进行剖析。我发现这一个项目的结构和我预想的还是有一定的差别,不知道是我的火候不够呢,还是公司的架构师水平不行呢?当然我认为肯定是第一种,因为我公司是国企,应该是架构师不止一个,虽然说我所在的开发二部没有架构师存在,但是架构师应该是千锤百炼的。

我看到首先就是代理层,我先把这个项目的调用关系介绍一下。

 

首先应用程序启动的是客户端代理层,这是我从来没有想到过的开发方式,通过代理层将UI层的界面以插件的形式进行加载,UI层相关的业务逻辑会调用客户端逻辑层,客户端逻辑层会通过.Net Remoting技术高效的调用服务层的方法,服务层通过DAL层进行增删改查操作,当然客户端与服务端的数据传输是通过DTO层进行的。

其中ORM层不是我原来认为的会通过ORM工具进行,而是数据实体层,可能是我没有看到里面具体的实现代码的原因,但是我看到的是ORM层是大量的数据实体,DTO层就是要传输的数据对象。她们会通过接口层进行方法的匹配调用。

通过这个项目,我不是说让我们了解到或者说学习到什么,我只是想说难怪每个程序员都不一样,设计出来的项目结构有时候也需要我们参考。原来多学习别人的设计可以带来这么多的用途。丰富自己的见解,能让自己耳目一新的感觉。

好了,不说废话了,我来说一下我通过这个结构学习到了什么?

首先就是客户端代理层,将UI以插件的方式进行加载,我个人认为这是个很不错的方法,代理层决定要加载哪些内容,而不是我们在界面上全部设计好,可以让代理层自己组装。

其次让我意外的就是数据传输层DTO的使用,说实话我一直就了解DTo的用途,但是我从来都没有想到过在实际的项目中要用到他。DTO和数据实体有一些区别。我在实际项目中一般都是传输数据实体,把数据库表对应的数据实体进行传输,当然我见到很多人都这样做,简单快捷,但是我今天看到了DTO层的单独使用,让我明白以后在追求好的解决方案的时候,开发上的快捷有时候会带来性能上的开销。我理解中的DTo应该是包括要传输的数据,但是可能包括一个表中的一个字段和另一个表的两个字段,这样通过DTo层可以很容易的实现,但是通过数据实体我们就需要传输两个对象,会无形中增加数据的开销。在一个追求效率和性能的项目中,应该是会绝对避免的吧。

第三个让我意外的就是那么多的项目结构,那么多类的开发,不同人的分工,竟然会咋那么短的时间内完成。我不得不佩服这些项目经理,如果在我以前的公司,这绝对是完成不了的,这就看出一个公司的管理是多么的重要,我离职的最重要的原因也是公司的管理不够,本来一个好的项目需要大家的共同努力,但是我们根本就不能提出意见,甚至我提出了一个建议,竟然被批评了那么长时间,甚至恶语相加。唉,不说也罢

总之,今天写这篇博客的目的就是让我们程序员的学习不要只是停留在书本上,要多看别人的项目代码,多研究别人的部分,任何一个程序员都会有他擅长的一面。所以我们不能只是看到自己多么的优秀,而忽略了他人的建议或优势。

今天的学习是为了明天的吃饱,不是仅有自己,还有孩子老婆。加油吧 朋友们

我又回来了,回到了技术最前线,
相关文章
WK
|
机器学习/深度学习 算法
什么是链式法则
链式法则在微积分中用于求复合函数的导数,简化了一元和多元函数的求导过程。在概率论与统计学中,它能够将复杂的联合概率分布分解为简单条件概率的乘积,便于分析。此外,在机器学习和深度学习等领域,链式法则也是反向传播算法的基础,帮助计算损失函数对网络参数的梯度,实现模型优化。这一法则为处理复合函数及概率问题提供了高效途径。
WK
1887 1
|
Java
【Java数组转集合】Arrays.asList() 方法(案例详解)
Java基础之Arrays.asList() 方法案例详解!
336 0
【Java数组转集合】Arrays.asList() 方法(案例详解)
|
2天前
|
云安全 监控 安全
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
879 5
|
12天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1083 41
|
9天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
650 37
|
12天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
719 62
大厂CIO独家分享:AI如何重塑开发者未来十年
|
8天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
453 29
|
16天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
928 59
Meta SAM3开源:让图像分割,听懂你的话