技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

随笔分类 -  架构设计

上一页 1 2 3 下一页

软件的模块化开发
摘要:http://www.cnblogs.com/snandy/p/3189379.html什么是模块化模块化这个词最早出现在研究工程设计中的《Design Rules》,这本探路性质的书中。其后模块化原则还只是作为计算机科学的理论,尚不是工程实践。此时硬件的模块化一直是工程技术的基石之一。如标准螺纹、汽车组件、计算机硬件组件等。软件模块化的原则也是随着软件的复杂性诞生的。从开始的机器码、子程序划分、库、框架、再到分布在成千上万公里的互联网上主机上的程序库。模块化是解决软件复杂性的重要方法之一。模块化以分治法为依据,但是否意味着我们把软件无限制的细分下去。事实上当分割过细,模块总数增多,每个模块的 阅读全文

posted @ 2013-07-30 15:12 codestyle 阅读(377) 评论(0) 推荐(0) 编辑

在软件架构上增加新功能的注意事项
摘要:摘要:系统架构设计之所以难是因为变数太大,既要从用户需求角度考量,又要考虑自身设计的种种局限性。异构系统间的接口设计是尤其需要注意的,因此,架构师要从宏观的角度来规划整个架构,以下列出五点注意事项仅供参考。文章来源于DZone,作者Simon Brown分享了自己在增强软件功能的工作中得出的一些经验,详细讲述了软件体系结构同样也需要加强功能性,并列出了增加新功能时需要重点考虑的注意事项。(以下是编译内容)我们现在需要提升正在使用的软件系统,将新的功能添加到现存的一些使用案例中。可以想象,用户案例得以执行,主要是通过用户在Web应用程序中的多个网页的实践,而且最终步骤的修改也是建立在大量用户案例 阅读全文

posted @ 2013-07-29 16:36 codestyle 阅读(578) 评论(0) 推荐(0) 编辑

C语言实现OOP 版本3 :简化代码
摘要:我倒是不追求代码和C++相似,但是应该追求简洁的代码,下面是一个新的尝试shape.h#ifndef SHAPE_H#define SHAPE_Htypedef struct shape_t { void *shapeData; void (*area)(void *); void (*release)(void *);}Shape;void release(void *shape);#endifshape.c#include #include "shape.h"void release(void *shape){ free(((Shape*)shape)->shap 阅读全文

posted @ 2013-07-27 13:20 codestyle 阅读(362) 评论(0) 推荐(0) 编辑

C语言实现OOP 版本2
摘要:写版本2的原因,还是发现在不同的具体图形模块里发现了重复的release代码,这是坏味道,所以还是决定消除这些重复代码,DRY!shape.h#ifndef SHAPE_H#define SHAPE_Htypedef struct shape_t { void *shapeData; void (*area)(void *); void (*release)(void *);}Shape;void release(void *shape);#endifshape.c#include #include "shape.h"void release(void *shape){ . 阅读全文

posted @ 2013-07-27 01:46 codestyle 阅读(411) 评论(0) 推荐(0) 编辑

C语言实现的OOP
摘要:我倒不是为了OOP而OOP,实在是OOP的一些特征,例如封装,多态其实是软件工程思想,这些思想不分语言,遵循了这些思想可以使得程序更有弹性,更易修改和维护,避免僵化,脆弱shape.h该文件定义的是图形接口,所有具体图形都必须实现自己计算面积,周长等API#ifndef SHAPE_H#define SHAPE_Htypedef struct shape_t { void *shapeData; void (*area)(void *); void (*release)(void *);}Shape;#endifcircle.h 圆形接口#ifndef CIRCLE_H#de... 阅读全文

posted @ 2013-07-27 01:24 codestyle 阅读(1800) 评论(2) 推荐(0) 编辑

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现
摘要:http://www.csdn.net/article/2013-07-11/2816199-architecture-twitter-uses-to-deal-with-150m-active-users摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变。Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据。整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twee 阅读全文

posted @ 2013-07-15 09:22 codestyle 阅读(979) 评论(0) 推荐(0) 编辑

Mongodb
摘要:http://topmanopensource.iteye.com/blog/1278811MongoDB基本介绍及一些用法满足海量存储需求和访问的面向文档的数据库:MongoDB,CouchDB MongoDB Nice, I like it very much. 面向文档的非关系数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。MongoDB是用C++开发的,而CouchDB则是Erlang开发的: 1、MongoDB MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据... 阅读全文

posted @ 2013-07-09 17:55 codestyle 阅读(406) 评论(0) 推荐(0) 编辑

寡人的接口设计是不是很赞呢
摘要:@include lib/assert.awk@include lib/logging.awk######################################################################################################## PUBLIC FUNCTIONS ################################################... 阅读全文

posted @ 2013-06-08 22:29 codestyle 阅读(465) 评论(0) 推荐(0) 编辑

日志打印
摘要:http://blog.csdn.net/mgoann/article/details/5681759日志打印日志重要性日志规则日志格式1、日志重要性日志无论是在开发过程还是定位问题以及了解应用的运行轨迹都有非常重要的意义。日志打印也是一项技术活,好的日志对日后的维护工作带来意想不到的帮助。通过日志的打印来定位问题通过日志的打印了解应用的运行轨迹通过日志完成性能调优通过日志了解应用状态2、日志规则l打印日志是用来分析的不是用来看的日志有很大一部分作用是用来分析的。打印出便于分析的日志,就是好的日志。便于分析可以从生产环境来考虑,大部分的生产环境都是Linux操作系统,Linux操作系统文本分析 阅读全文

posted @ 2013-06-04 15:22 codestyle 阅读(1485) 评论(0) 推荐(0) 编辑

转:Logging 日志记录最佳实践
摘要:http://www.oschina.net/question/12_44624http://www.oschina.net/question/12_44624介绍本文解释应用程序中的错误和调试日志的最佳实践。应用日志是一个非常重要的“工具”用来帮你查明具问题。如果有一个基础架构用来记录应用中的日志和事件,那么调试和问题的解决就会变得很简单。在开始文章之前,我们要介绍两个相关的工具:Logstash-http://www.oschina.net/p/logstashGraylog2-http://www.oschina.net/p/graylog2不同的日志含义日志 Logging 可以代表不 阅读全文

posted @ 2013-05-29 11:49 codestyle 阅读(341) 评论(0) 推荐(0) 编辑

awk新风格(模块化)的业务代码
摘要:main.sh (程序入口代码)参数DEBUG会决定logging模块的debug函数是否输出日志以方便调试,这其实是我目前形成的理念之一:一旦我决定在这里写下一个输出语句方便调试,那么这个语句我就不会再删除了我见过很多的研发人员(包括以前的我自己)喜欢在程序里加上一堆输出语句(alert,printf,MessageBox)打印一堆没有什么含义的语句(例如ssssssss,111111)以及变量的值,之后再删掉,删掉之后在添加,添加之后再删除。。。其实,他们是为了确定程序状态,看看程序有没有运行到添加输出语句的位置,或者想想看看程序在那个时刻的值到底是啥,但是他们觉得这些日志语句不属于业务逻 阅读全文

posted @ 2013-05-26 19:53 codestyle 阅读(413) 评论(0) 推荐(0) 编辑

转:談談gawk 裡的 igawk
摘要:http://bbs.chinaunix.net/thread-1450345-1-1.html我們寫腳本,很多情況下是一次性的,所以傾向寫一些常用的函數掉用,例如我的$HOME/lib/awk 就寫了一些函數, 然而怎樣掉用這些函數,不成每用一次就複製到腳本上,我在命令列又如何掉用呢?鑑於這種需求,Gnu awk為使用者提供了一個變量,和一個可以包含你寫的函數的命令,他們就是 AWKPATH 和 igawkAWKPATH 這個變量內定的路徑為 , 手冊上答案是.:/usr/local/share/awkhttp://www.gnu.org/manual/gawk/html_node/AWKP 阅读全文

posted @ 2013-05-15 01:22 codestyle 阅读(382) 评论(0) 推荐(0) 编辑

awk的模块化方案,在这公司苦逼很久以后想到的
摘要:test.sh#!/bin/shecho demos | igawk -f test.awktest.awk#!/usr/bin/igawk -f@include common.awk{ filename = $0 makeArray(filename,array) printArray(array) makeInsertSQL("aaa",array,"test.sql")}common.awkfunction sayHello(s,_ARGVEND_){ print "hello "s}function makeArray(fil 阅读全文

posted @ 2013-05-14 20:15 codestyle 阅读(449) 评论(6) 推荐(0) 编辑

转载:网站的分布式架构
摘要:http://www.cnblogs.com/sharpxiajun/archive/2013/05/11/3072798.html 互联网的网站和大部分企业管理软件一样都是使用B/S架构模型,但是大型的公共网站B/S架构会更加复杂,对架构人员的要求更高,今天我想在自己博客里聊聊我设计的网站的B/S技术架构。 不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简图: 在传统B/S架构的企业管理系统里,技术架构往往就是一个工程项目,各个逻辑分层都是该工程的业务逻辑模块。但是作为提供公共服务的网站,由于用户群比较庞大,网站并发量高,需求变化大,变更频繁以及网站出于对安全的考虑,以上... 阅读全文

posted @ 2013-05-13 19:35 codestyle 阅读(241) 评论(0) 推荐(0) 编辑

一个需求变更的历史,你的设计是啥?
摘要:需求根据用户的贡献值计算pab(支付给用户的现金)用户信息包括userid,classid,bu3,bu5,bu7,newimei(bu3~bu7,newimei都是某种贡献值)最初的需求pab1 = newimei * 0.8 /1.3pab = min(pab1,bu7)第1次提出的需求变更当classid = 300时10天内pab1 =bu5pab = min(pab1,bu7)10天后pab1 = newimei * 0.8 /1.3pab = min(pab1,bu7)第2次提出的需求变更当用户userid=2000pab1 = newimei * 0.8 /1.5pab = mi 阅读全文

posted @ 2013-04-24 20:57 codestyle 阅读(394) 评论(1) 推荐(0) 编辑

Awk 中变量作用域的问题(Awk模块化,转载者自己添加的补充信息)
摘要:http://www.ibm.com/developerworks/cn/linux/l-cn-awkf/温 泉(saphires@sohu.com), 软件工程师, 捷思锐科技(北京)有限公司简介:本文从两个错误的例程开始,提出 Awk 中全局变量污染的现象,并分析其发生的原因。接下来,针对 Awk 变量作用域的特点,提出两种避免全局变量污染的常用方法,引出 Awk 中定义局部变量的方法,并提出修改过后的代码。然后,通过 Awk 的变量调试功能,提出修改过后代码存在的不足,并引出编写通用函数应注意的地方。最后,通过简单说明 Awk 中包含头文件的方法,倡导大家更科学,更有效的使用 Awk 这 阅读全文

posted @ 2013-04-03 11:07 codestyle 阅读(710) 评论(0) 推荐(0) 编辑

被老大毙掉的架构设计,真的很差吗?
摘要:原因:在ipad上做一个类似于ibook的软件,其实相当于用webBrowser展现一套HTML页面(写了个JS框架控制内部数据的加载,所谓内部数据就是一套JSON文件和图片)需求:做一套生成他规定的内部数据的工具,要所见即所得,至少也要和他展现形式差不多的形式(HTML页面)进行编辑保存,PHP编写,支持导入导出设计思路:抛弃书先不谈(因为存储格式未定),理论上:页面和文本块,图片本身是树状结构,然后多个页面构成一个知识点,多个知识点构成一本书,从结构上看树状结构,如果要导入这样的数据进行编辑,那么我的思路是首先构造这样的树(在内存里)之后绘制他们页面的绘制:调用页面类的show方法。如果要 阅读全文

posted @ 2013-03-19 23:02 codestyle 阅读(6900) 评论(53) 推荐(4) 编辑

项目设计阶段的一些事
摘要:设计阶段模块和接口所能细化到的程度:SSO模块的设计SSO模块更细的设计 阅读全文

posted @ 2013-01-17 10:29 codestyle 阅读(161) 评论(0) 推荐(0) 编辑

mock对象3:前进!用库和引用屏蔽掉业务对象和mock对象
摘要:引言上次给我领导演示过mock对象,领导觉得很好,不过他觉得这个方案不完美,因为我们通过一个基类对象屏蔽掉了业务对象和mock对象,虽然从接口上看,看不出这两者的区别,但是对于现有程序,为了造出mock对象进行测试,还要先重构程序才能做到这一点,领导觉得不爽,他想要一种完全透明的解决方案,不修改现有的任何一行代码,就能在业务对象和mock对象之间进行切换,我想了一下,觉得似乎可以通过导入不同库来解决,也就是说我写一个动态链接库项目,定义和业务对象具有相同名字,方法,属性的类,由于上次演示的业务对象其实是系统的库(System.Messaging)系统库在.NET的技术框架下是通过引用导入到项目 阅读全文

posted @ 2012-11-19 14:02 codestyle 阅读(470) 评论(0) 推荐(0) 编辑

python:装饰模式的一个实现
摘要:#!/usr/bin/env python# -*- coding: utf-8 -*-import syssys.path.append("..")import commonclass Component: def __init__(self,data): self.url = data["url"] self.noteId = data["noteId"] self.userId = data["userId"] self.folderId = data["folderId"] def ex 阅读全文

posted @ 2012-10-25 23:35 codestyle 阅读(304) 评论(0) 推荐(0) 编辑

上一页 1 2 3 下一页
点击右上角即可分享
微信分享提示