如何能编写一个好的软件?这个问题我也一直在问我自己,每一次开发新的项目的时候,我都希望或争取这一次比上次做得好,至少我自己这么认为。虽然的确感觉每次都有一些成长,但是总是不能让人觉得满意。造成不满意的原因有很多,大多被我归咎到:时间紧任务重,所以劳动量大,能力有限,还有需求不明和需求不断的变化使我觉得继续做下去很乏味。我相信很多人跟我有同感。我也相信实际上这个问题很难回答,这有一个例子不错,不妨来看看。
情景:吉他店的老板决定要用一个查询系统代替原先的纸质纪录,以帮助他的客户更快的查询导向要的吉他。
根据用户所提供的需求,我们建立了两个类型:吉他和仓库。吉他类型中包含了吉他的各个属性;仓库类型中包含了吉他列表以及一些功能方法,如:添加吉他,获得吉他,查询吉他。
现在就来实现这两个类型:
public class Guitar
{
private String _serialNumber;
private Double _price;
private String _builder;
private String _model;
private String _type;
private String _backWood;
private String _topWood;
public Guitar() { }
public Guitar(String serialNumber, Double price,
String builder, String model, String type, String backWood,
String topWood)
{
this._serialNumber = serialNumber;
this._price = price;
this._builder = builder;
this._model = model;
this._type = type;
this._backWood = backWood;
this._topWood = topWood;
}
public String SerialNumber
{
get { return _serialNumber; }
set { _serialNumber = value; }
}
public Double Price
{
get { return _price; }
set { _price = value; }
}
public String Builder
{
get { return _builder; }
set { _builder = value; }
}
public String Model
{
get { return _model; }
set { _model = value; }
}
public String Type
{
get { return _type; }
set { _type = value; }
}
public String BackWood
{
get { return _backWood; }
set { _backWood = value; }
}
public String TopWood
{
get { return _topWood; }
set { _topWood = value; }
}
}
public class Inventory
{
List<Guitar> guitars;
public Inventory()
{
guitars = new List<Guitar>();
}
public Boolean addGuitar(String serialNumber, Double price,
String builder, String model, String type, String backWood,
String topWood)
{
guitars.Add(new Guitar(serialNumber, price, builder, model, type, backWood, topWood));
return true;
}
public Guitar getGuitar(String serialNumber)
{
Guitar reseachGuitar = null;
foreach (Guitar guitar in guitars)
{
if (guitar.SerialNumber == serialNumber)
{
reseachGuitar = guitar;
break;
}
}
return reseachGuitar;
}
public List<Guitar> searchGuitar(Guitar searchGuitar)
{
List<Guitar> list = new List<Guitar>();
foreach (Guitar guitar in guitars)
{
if (guitar.SerialNumber != searchGuitar.SerialNumber) { continue; }
if (guitar.BackWood != searchGuitar.BackWood) { continue; }
if (guitar.Builder != searchGuitar.Builder) { continue; }
if (guitar.Model != searchGuitar.Model) { continue; }
if (guitar.Price != searchGuitar.Price) { continue; }
if (guitar.TopWood != searchGuitar.TopWood) { continue; }
if (guitar.Type != searchGuitar.Type) { continue; }
list.Add(guitar);
}
return list;
}
顾客只需要将其想要吉他的信息输入,系统调用searchGuitar函数就可以查询出相应的吉他列表。下面我们加入测试代码:
public class Test
{
static Inventory inventory;
static void Main(string[] args)
{
InventoryInit();
Guitar searchguitar = new Guitar("", 0, "builder1", "model1", "type1", "backwood1", "topwood1");
List<Guitar> guitarlist = inventory.searchGuitar(searchguitar);
if (guitarlist.Count != 0)
{
foreach (Guitar guitar in guitarlist)
{
Console.WriteLine("Find the Guitar's SerialNumber is" + guitar.SerialNumber);
}
}
else
{
Console.WriteLine("Can't find the Guitar");
}
Console.Read();
}
public static void InventoryInit()
{
inventory = new Inventory();
inventory.guitars = new List<Guitar>();
inventory.guitars.Add(new Guitar("0001", 123, "builder1", "model1", "type1", "backwood1", "topwood1"));
inventory.guitars.Add(new Guitar("0002", 123, "builder2", "model2", "type2", "backwood2", "topwood2"));
}
}
查询结果如下:
但是结果往往并不像我们想象得那么顺利。比如说用户在查找时输入如下时查询结果就不尽人意了
("0001", 123, "builder1", "Model1", "type1", "backwood1", "topwood1")
第一件事我们需要改变什么?如何写一个好的软件?
首先,好的软件必须满足客户需求。软件必须做客户想让它做的事情。
第二,好的软件是好的设计,好的编码,简单的维护,重用和扩展
换句话说,好的软件需要三步:
回来再看我的例子,要让刚才的程序变为一个好的软件,第一步是要确定我的软件做客户想让它做的事情。但是现在由于客户输入的信息在大小写上和存储的信息有偏差,造成的结果无法查找出来。不过要注意:在解决问题时不要带入新的问题。现在所要做的是满足客户需求。既然查询的时候因为大小写有偏差,那就把客户的输入信息和要比对的信息都换成小写。修改Inventory类型中的searchGuitar
public