关于过度设计、设计不足的思考

翻博客的时候,偶然间发现一个词过度设计,与之想对应的则为设计不足,发散下思维,看看些文章做一些自己的总结。

过度设计

过度设计指的是:设计实现出来的系统臃肿庞大,功能俱全确不好用,特别是那种巨型的ERP系统。分为需求层面上的过度设计和软件实现层面上的过度设计。

需求层面上的的过度设计: 需求上的过度设计即过度解读用户需求, 形成了太多的衍生需求,这些需求是否能够真正帮助用户还是两说. 这些衍生需求是 否需要设计还是丢弃需要权衡。
软件设计层面上的过度设计: 过度的封装、一堆接口和无用的方法、超复杂的xml配置文件,不恰当的框架选型等。造成代码臃肿,难以维护.

设计不足

设计不足: 指的是设计出来的系统复用性差,扩展性不足,不能灵活的应对变化,甚至达不到用户需求.

总而言之,设计不足和过度设计都是设计不当,实际情况下不论是以需求为导向还是前瞻性的需求为导向到应该寻取两者的平衡点,尽量做到设计简洁、实用.

南京出差~

前前后后算起来去南京出差已经几次了,还没有好好逛逛四朝古都呢,趁最后一次机会,就近去夫子庙、秦淮河走一圈~

总的来说,晚上的秦淮河还是值得一去的.领略特色小吃,行船而过,也只有晚上才能稍稍感受到古往的才子佳人、风雅之气

-- EOF --

IDEA使用技巧

写在前面

工作中一直使用Eclipse作为开发工具,自己下来玩的时候用IDEA居多,然而有时候一些快捷键啊,配置操作啊,容易忘.当时在搜索又比较耗时间,而且网上的文章也不够直接,好记性不如烂笔头,自己做一个记录列表.

自动import

IDEA没有类似Eclipse的自动导入清除无用包快捷键optimize imports(ctrl+shift+o),但是可以通过设置让IDE支持自动导入与删除已经明确的包.如下图所示:

Springboot

Start

@SpringBootApplication
拆分
@Configuration
允许在上下文中注册额外的bean或导入其他配置类
@EnableAutoConfiguration
启用springboot自动配置机制
@ComponentScan
扫描被@Component(@Service,@Controller)注解的bean,默认扫描该类所在的包下所有的类

@PostMapping实际上就等价于 @RequestMapping(method = RequestMethod.POST),同样的 @DeleteMapping ,@GetMapping也都一样,常用的 HTTP Action 都有一个这种形式的注解所对应。
@PathVariable :取url地址中的参数。@RequestParam url的查询参数值。
@RequestBody:可以将 HttpRequest body 中的 JSON 类型数据反序列化为合适的 Java 类型。
ResponseEntity: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容。

@EnableConfigurationProperties(prefix=”前缀”)
读取主配置文件前缀相关的配置

SpringBoot异常处理

@ControllerAdvice(assignableTypes = {IndexController.class})

@ExceptionHandler(value = Exception.class)

使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常
@ExceptionHandler 处理 Controller 级别的异常
ResponseStatusException

异常收集

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

SpringBoot 2.0.0 以上都采用内置tomcat8.0以上版本,而tomcat8.0以上版本遵从RFC规范添加了对Url的特殊字符的限制,url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~四个特殊字符以及保留字符( ! ’ ( ) ; : @ & = + $ , / ? # [ ] ) (262+10+4+18=84)这84个字符,请求中出现了{}大括号或者[]


本文链接: http://kiritor.github.io/2017/04/05/springboot/

-- EOF --

Spring Boot(三):配置详解

写在之前

在前面Spring Boot的入门篇中,可以很直观的感受到使用Spring Boot没有了原来整合Spring应用时繁琐的XML配置内容,替代它的是在pom.xml中引入模块化的Starter POMs,各个模块具有自己的默认配置.在application.properties文件中,只需要设置少量的应用即可开启应用.

在实际的项目中,配置是十分复杂的,存在多个配置环境,例如:

开发环境 -> 测试环境 -> 演示环境 ->生产环境

每个环境的配置项总是不同的,而且就算是在开发环境中,不同的开发人员也会有区别,配置文件的读取总是比较伤脑筋.Spring Boot提供了一种优先级配置读取机制很好的解决此问题.
在入门篇中,了解到Spring Boot的配置会从application.properties中读取,实际上这只是Spring Boot配置链中的一环而已.

Spring Boot(二):war包形式发布

在上一篇入门文章中,也提及了Spring Boot可以发布成war包运行在外包的tomcat中.具体做法如下.

  1. 在POM.XML文件中将jar改为war
  1. 添加依赖.
    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
    </dependency>

Spring Boot(一):快速入门

简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建及开发过程。JavaEE开发的小伙伴肯定听说过”约定优于配置”、”契约式编程”,就是说系统、类库、框架应该假定合理的默认配置,而非要求提供不必要的配置,简化配置项减少跨平台部署容易出现的问题。基于这些问题Spring Boot应运而生,更简单快捷的构建Spring应用。

Spring Boot优点

Spring Boot让Spring应用简单、快速、轻量化!传统的Spring应用搭建一个基础的spring web项目需要做些什么呢?

1) 配置web.xml,加载spring和spring mvc.
2) 配置数据库连接、配置spring事务等.
3) 配置文件的加载、读取.
4) ……

之后的部署,打包十分繁琐.虽然基于”约定优于配置”Spring能够减少了很多的配置项,但是仍然比较臃肿,每个项目都需要这么折腾一遍!但是如果使用微服务Spring Boot框架,只需少量配置即可.

第一次面试官经历

临时接到通知让我作为面试官。才接到这个通知,内心是比较高兴和担忧的,担心的点在于面试的是社招,怕自己的技术能力尚不能胜任(后面证明自己想多了)。

和人资那边协作,事先拿到面试人员的简历,大致的了解下面试者情况,下午开始面试。自己作为面试官事先的工作和面试过程都还不错,进行的比较顺利。

有一些体会:

面试者:

• 很多简历存在极大的水分与不实情况,需要面试官甄选(面试官是不容忍的).
• 面试者对面试的职位要有认知,技术能力能否达到应聘职位很重要,如果相差甚远反效果(自我认知不够).
• 避免技术罗列,以实际项目用到的技术为准,适当发散.