程式的一致性

這一陣子斷斷續續都在幫系上的學長修改系上的期刊系統。 我們是使用ojs 這套開放原始碼的系統,我看學長用起來功能還頗為完善,不過中文語系尚未完全翻譯完畢,算是較為可惜的地方。

不過外國人所寫的系統有個問題就是他們的全名排列方式跟我們的不一樣,學長希望我改一下這個問題。我跟學長討論了一下之後,決定採用判斷姓名的utf8編碼是否落於中文的範圍,如果是就把排列順序倒過來這種方式來做。

不過後來真的改到吐血,經常一找就是一個晚上。為什麼呢? 因為ojs程式碼的一致性不太好,舉例來說:

使用者的全名透過 User.inc.php裡面 的getFullName(582行)  函式回傳,這段的程式碼長這樣:

    function getFullName($lastFirst = false) {
       if ($lastFirst) {
          return $this->getData('lastName') . ', ' . $this->getData('firstName') . ($this->getData('middleName') != '' ? ' ' . $this->getData('middleName') : '');
       } else {
          return $this->getData('firstName') . ' ' . ($this->getData('middleName') != '' ? $this->getData('middleName') . ' ' : '') . $this->getData('lastName');
       }   
    }  

看起來相當合理,但是Editor & Reviewer 的姓名卻不是放在相同階層的class中。這兩者都是放在DAO 等級的類別中,以Editor 為例 就放在 EditAssignmentDAO中把資料塞進類別變數的函式_returnEditAssignmentFromRow中:

 
 function &_returnEditAssignmentFromRow(&$row) {
   $editAssignment = &new EditAssignment();
   $editAssignment->setEditId($row['edit_id']);
   $editAssignment->setArticleId($row['article_id']);
   $editAssignment->setEditorId($row['editor_id']);
   $editAssignment->setCanReview($row['can_review']);
   $editAssignment->setCanEdit($row['can_edit']);
   $editAssignment->setEditorFullName($row['first_name'].‘ ‘.$row['last_name']);
   $editAssignment->setEditorFirstName($row['first_name']);
   $editAssignment->setEditorLastName($row['last_name']);
   $editAssignment->setEditorInitials($row['initials']);
   $editAssignment->setEditorEmail($row['email']);
   $editAssignment->setIsEditor($row['editor_role_id']==ROLE_ID_EDITOR?1:0);
 $editAssignment->setDateUnderway($this->datetimeFromDB($row['date_underway']));
 $editAssignment->setDateNotified($this->datetimeFromDB($row['date_notified']));

 HookRegistry::call(‘EditAssignmentDAO::_returnEditAssignmentFromRow’, array(&$editAssignment, &$row));
 
  return $editAssignment;
  }

請注意第八行的地方…
你說找到頭昏是不是正常現象…. 所以我覺得程式的一致性邏輯很重要,怎樣奇怪都沒關係,你要把全名的組合函式放到DAO層級或是到 Model 層級都沒關係,重點是要一致阿!!!!

廣告

9 thoughts on “程式的一致性

  1. 最近剛好被老闆"拜託",要我摸一下這份系統,我想請教除了PKP網站上的東西,還有沒有一些參考文件?我目前卡在出版的部份,流程好複雜QQ

  2. 又來打擾了…主要想問有沒有比較完整的中文化套件或者現成修改好的部份可以分享?目前後台呈現不完全中文化,老闆"們"對這件事非常在意,還有一些程式上的問題,比如說線上e-mail的附加檔案全部會被改副檔名為tmp…

    這個暑假,我應該會在水深火熱之中QQ

  3. hi:

    我們的中文化也不是太完全,不過是比官方的多,我得問一下學長。 剩下的就要麻煩你自己翻譯一下了 😀

    副檔名被改的部份我就沒聽說了,敢問是用那一個版本呢?

  4. 拜託了(跪

    我們的ojs版本是2.3.1.2

    其他環境為

    OS platform WINNT
    PHP version 5.3.2
    Apache version Apache/2.2.15 (Win32) PHP/5.3.2
    Database driver mysql
    Database server version 5.1.48-community

    本來想會不會是系統環境本身的問題,我們家老大把檔案備份出來重新安裝後…

    問題沒有解決,現在檔案連收都收不到,而起系統中文卻全變成亂碼了T_T

    BTW…謝謝

  5. 沒想到,你後來還有回應我耶,真是太感謝你了
    老闆要我轉戰另一個系統,後來我就忘了回來follow後續
    現在報應的時候到了,老闆又想起這個東西,似乎又得與之搏鬥
    xml的語系檔大概多大呢?如果不大,可否使用email傳遞?又或者我拿硬碟到你們學校copy(唐突了,但我也是火燒屁股啊)

    感謝俠士願意賜與寶刀相助

    題外話
    現在學校專題正在寫一個flash遊戲,我們算是設計類的,老師as語法功力比我還差,含淚摸索程式碼真是痛苦的一件事

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s