是不是服务端编程刚开始都得从写业务开始?

小菜刚毕业一年,先前一直在做linux服务端的开发,最近进入一家游戏公司,写c++游戏服务端,进来了一个月,都是写游戏逻辑,感觉好没意思。但问了一位前…
关注者
627
被浏览
28,055
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

业务逻辑复杂起来是很考验你的coding skill的。如果忽略技巧,用蛮力写业务逻辑,不追求代码之神,敲完就算,当然无聊啦。

---

你可以

switch (gender):
  case 'male':
     if (level === 'gold') {

     } else if (level === 'silver') {

     } else {

     }
     break;
  case 'female':
     if (level === 'gold') {

     } else if (level === 'silver') {

     } else {

     }
     break;
  case 'unknown':
     if (level === 'gold') {

     } else if (level === 'silver') {

     } else {

     }
     break;


这是一般业务逻辑程序员认为的“业务逻辑”,你每天写这种代码,当然觉得无聊。

你也可以

GENDER = {
  MALE: 'male',
  FEMALE: 'female’,
  UNKNOWN: 'unknown'
}
LEVEL = {
  GOLD: 'gold',
  SILVER: 'silver',
  BRONZE: 'bronze'
}

avatars = {
  GENDER.MALE => {
     LEVEL.GOLD =>
     LEVEL.SILVER => 
     LEVEL.BRONZE =>
  },
  GENDER.FEMALE => {
     LEVEL.GOLD =>
     LEVEL.SILVER => 
     LEVEL.BRONZE =>
  },
  GENDER.UNKNOWN => {
     LEVEL.GOLD =>
     LEVEL.SILVER => 
     LEVEL.BRONZE =>  
  }
}

user.gender = (user.gender in GENDER) ? user.gender : GENDER.UNKNOWN
user.level  = (user.level in LEVEL) ? user.level : LEVEL.BRONZE

user.avatar = avatars[user.gender][user.level];

这样写业务逻辑就有趣多了。

后一种是Data Driven的思考方式,用数据,或者设计数据来驱动逻辑,让逻辑的外观从代码里消失,从而让代码更紧凑,节奏感更强,读起来更舒服,改起来更方便。这是在web开发里常用的技巧,游戏逻辑里应该也有不少数据驱动的场景,如果你能为特定逻辑设计出一目了然的数据,就能大大降低逻辑的复杂度,写出的东西更鲁棒,效率通常也更高,就不会觉得写这种业务无聊了,因为有技巧在里面。

---

你可以

for (items) {
  item[..] =
  // or
  if () {
    return item
  }
}

也可以

items.each(item => process(item))
items.filter(item => verify(item))
items.map(item => update(item))

用好函数式,能帮你化解各种无聊的循环,外观上看,代码的抽象层次更高了,语句更清晰了,读起来更舒服了。

---

你可以

class {
  showLogo () {
    showAd()
    ...
  }
  showBanner () {
    showAd()
    ...
  }
  showSidebar () {
   showAd()
   ...
  }
}

也可以

class {
  @decorated by AdDecorator 
    showLogo,
    showBanner,
    showSidebar
  ...
}

简单的Decorator,是不是让代码紧凑精简,有意思多了?

---

你可以

s : string = 'thanks ' 
if () {
  s = s + name
  s = s + ' for purchasing
  if () {
    s = s + quantity
    s = s + product
  }
}
s = s + ..

也可以

t = "thanks {name} for purchasing {quantity} {product} .."
s = t.compile({name, quantity, product})

把比较脏的局部拼接逻辑变成一目了然的模版,品味高出截。

---

你可以

function attach() {
  app.A = 
  db.update(app.states)
  log(..)
}
function move() {
  app.B = 
  db.update(app.stats)
  log(..)
}

也可以

app.on('change', 'stats', stats => {
  db.update(stats)
  log(..)
})
function attack() {
  app.update(A ..)
}
function move() {
  app.update(B ..)
}

...

同样繁杂的业务逻辑可以写得拖沓重复,无聊透顶,也可以写得精粹漂亮,有乐趣和美感啊。只需要在敲键盘前多花点时间来构思,并不难。

你确定底层编程需要更高阶的思想吗,其实只是数据和操作的形态不同罢了,思维和技巧还是适用的。再说要多底层才能满足你的虚荣心呢?

* 以上代码非C++代码,概念实现请参照编程语言。

* 感谢你看完,如果想评论,请对题,不要我说了一通你随便一扯,否定为己任,我没兴趣接受那种评论

-

vultr.com

有目前性价比最高的 $5 VPS,768的内存