引言
在新東家實習已經快一個月了,環境還可以,工作也相對輕鬆。
公司主要業務是電商SAS平臺,開發部門算上我有5個人,3個後端兩個前端,我負責後端,算一個比較正規的小團隊吧。
實習期間呢,我全力負責SAS平臺的三個模組後臺的業務開發,分別是素材庫、社群(帖子)、商學院(課程)。
這些需求對久經沙場的我來說,自然不在話下,沒到一個月就完成了初步的開發,接下來只需要與前端對接完就可以了。
事情經過
但是這幾天與leader發生了一些摩擦和爭執,百般無奈下,我也只好向他妥協。
主要兩個件事:
-
欄位必填
起初的時候我給課程設計了兩個欄位,一個是課程的開課和結束時間。(後面我仔細看了下需求,並不需要這兩個欄位)我資料庫給這兩個欄位約束了”必填“ 就是 不能為null。
他可能遷移資料的時候,報了這兩個欄位沒有預設值導致錯誤了吧~ 於是截圖給了我,什麼也不說。然後我就解釋說,這兩個欄位設定必填才合理,不應該設定預設值。
然後他給我的迴應是:必填也要有預設值 (我一頭霧水...)
-
程式碼冗餘
繼 ”欄位“ 事件後,他也對我寫的一個介面進行了審查。 我寫的一個 推薦產品的Api介面,可以根據不同的分類,篩選出可選的產品。
舉個例子:
產品型別有:商品 和課程
我需要根據這個型別 去對應的表拿可選的資料。後臺新增資料的時候也有這個需求,於是我就寫在了一個Api,前端和後臺都可以共用這個介面。
於是,他就覺得這樣不行,要求我拆分開來。 我問他原因呢,他又說不出來,我以為他不瞭解需求,就不斷的向他講述,最後沒有用,結果自然鬧得很僵。
我們就這樣僵了兩三天吧,他就找我談話了,說要我適應環境,把業務都寫在一個Function 裡,因為昨天同事看了我的程式碼,跳來跳去的,看不懂~ ,
我說我可以對我這塊業務寫個詳細的文件,這也不行,無奈下,我也只好妥協。剛來不久,很多東西都不能硬性的去改變,也只能去適應他們的開發方式。
接著,他對我的介面設計又有意見了。社群下的帖子和商學院裡的課程都能評論,回覆,點贊。
於是我把這些各自寫成一個介面,只需要傳引數識別是課程還是帖子就行了。他要求我把這些拆分出來,就是說課程的評論和帖子的評論不能一個介面。百般的解析下,無用,我也只好再一次妥協。
修改後的對比
修改後的程式碼我真的不想看~ 感覺要被後面的人挖祖墳~~
就簡單帖一個建立評論操作的對比吧~
修改前:
-
建立評論操作入口
/**
* 建立評論
* @param CommentRequest $request
* @param $id
* @return mixed
*/
public function createComment(CommentRequest $request, $id)
{
//獲取type,根據typpe 獲取對應的query
$type = $request->input('type');
$query = BaseModel::getQuery($type);
$data = $request->except('type');
//檢查物件是否存在
try {
$object = $query->findOrFail($id);
} catch (ModelNotFoundException $exception) {
return $this->failed('物件不存在');
}
try {
//把物件和資料傳到建立評論操作 createCommentHandle
NewRetailCommonComment::createCommentHandle($object, $data);
return $this->success('評論成功');
} catch (\Exception $exception) {
return $this->failed($exception->getMessage());
}
}
- CommentRequest.php
Request 中傳個型別和內容
<?php
namespace App\Http\Requests\Api;
use Illuminate\Foundation\Http\FormRequest;
class CommentRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'type' => 'required|in:post,course',
'content' => 'required|min:1'
];
}
}
- BaseModel.php
根據型別獲取不同的例項
/**
* 獲取不同的$Query
* @param $type
* @return bool|\Illuminate\Database\Eloquent\Builder
*/
public static function getQuery($type)
{
switch ($type):
case 'post':
return NewRetailCommunityPost::query();
break;
case 'course':
return NewRetailCourse::query();
break;
case 'comment':
return NewRetailCommonComment::query();
break;
case 'replies':
return NewRetailCommonCommentReplies::query();
break;
default:
return false;
endswitch;
}
- NewRetailCommonComment.php
/**
* 新增評論處理操作
* @param $object
* @param $data
* @return bool
* @throws \Exception
*/
public static function createCommentHandle($object, $data): bool
{
//判斷物件的型別 獲取例項
if ($object instanceof NewretailCommunityPost) {
$model = new NewretailCommunityPost();
} elseif ($object instanceof NewRetailCourse) {
$model = new NewRetailCourse();
}
//判斷物件是否有效
$model::isEffective($object);
//評論功能是否開啟
if (!$model::isComment()) {
throw new \Exception('評論功能還沒有開啟哦~~');
}
//是否需要稽核
if (!$model::commentIsReview()) {
$data['status'] = CommunityPostEnum::ONE;
}
//返回建立所需的共用資料
$uuidAndCustomer = BaseModel::getCustomerAndUuid();
//陣列合並
$data = array_merge($data, $uuidAndCustomer);
//建立評論
$object->comment()->save(new NewRetailCommonComment($data));
return true;
}
修改後:
修改後的話,就是全部放一個Function裡。實在沒眼看~~
- 入口(建立文章評論)
/**
* 建立評論
* @param CommentRequest $request
* @param NewRetailCommunityPost $post
* @return mixed
*/
public function createComment(CommentRequest $request, NewRetailCommunityPost $post)
{
$data = $request->all();
try {
NewRetailCommonComment::createPostComment($data, $post);
return $this>success(ErrorCodeEnum::RETURN_ERROR_CODE_MSG[ErrorCodeEnum::ACTION_SUCCESS]);
} catch (\Exception $exception) {
return $this->failed($exception->getMessage());
}
}
- NewRetailCommonComment.php
/**
* 建立文章評論
* @param $data
* @param $post
* @return bool
* @throws \Exception
*/
public static function createPostComment($data, $post): bool
{
$model = new NewretailCommunityPost();
if ($post->is_del
|| $post->status != CommunityPostEnum::ONE
|| Auth::user()->customer_code != $post->customer_code) {
throw new \Exception(ErrorCodeEnum::RETURN_ERROR_CODE_MSG[ErrorCodeEnum::POST_NO_FOUND]);
}
/**
* 判斷是否可以評論
*/
if (!$model::isComment()) {
throw new \Exception(ErrorCodeEnum::RETURN_ERROR_CODE_MSG[ErrorCodeEnum::NO_OPEN_COMMENT_PERMISSION]);
}
/**
* 判斷是否需要稽核
*/
if (!$model::commentIsReview()) {
$data['status'] = CommunityPostEnum::ONE;
}
$user = Auth::user();
$data = array_merge($data, [
'customer_code' => $user->customer_code,
'uuid' => $user->uuid
]);
$post->comment()->save(new NewRetailCommonComment($data));
return true;
}
建立課程評論 又需要 重新差不多的程式碼~~~
總結
我發這篇文章的本意並不是如何的抬高自己,貶低別人,我也不認為自己寫得有多好,寫一些業務程式碼,沒什麼值得驕傲的。通過這件事,我領悟到了,有時候有些事情,就算你很不喜歡,很不樂意,為了生活,也得適當的妥協。成長,就是不斷向自己妥協的過程。
這種環境並不是我向往的,但是生活所迫,暫時任性不了,我還是會保持我的個性。