成長,就是不斷向自己妥協的過程

NaturalGao發表於2019-12-14

引言

​ 在新東家實習已經快一個月了,環境還可以,工作也相對輕鬆。

​ 公司主要業務是電商SAS平臺,開發部門算上我有5個人,3個後端兩個前端,我負責後端,算一個比較正規的小團隊吧。

​ 實習期間呢,我全力負責SAS平臺的三個模組後臺的業務開發,分別是素材庫、社群(帖子)、商學院(課程)。

​ 這些需求對久經沙場的我來說,自然不在話下,沒到一個月就完成了初步的開發,接下來只需要與前端對接完就可以了。

事情經過

但是這幾天與leader發生了一些摩擦和爭執,百般無奈下,我也只好向他妥協。

主要兩個件事:

  1. 欄位必填

    ​ 起初的時候我給課程設計了兩個欄位,一個是課程的開課和結束時間。(後面我仔細看了下需求,並不需要這兩個欄位)我資料庫給這兩個欄位約束了”必填“ 就是 不能為null。

    ​ 他可能遷移資料的時候,報了這兩個欄位沒有預設值導致錯誤了吧~ 於是截圖給了我,什麼也不說。然後我就解釋說,這兩個欄位設定必填才合理,不應該設定預設值。

    ​ 然後他給我的迴應是:必填也要有預設值 (我一頭霧水...)

  2. 程式碼冗餘

    ​ 繼 ”欄位“ 事件後,他也對我寫的一個介面進行了審查。 我寫的一個 推薦產品的Api介面,可以根據不同的分類,篩選出可選的產品。

    ​ 舉個例子:

    ​ 產品型別有:商品 和課程

    ​ 我需要根據這個型別 去對應的表拿可選的資料。後臺新增資料的時候也有這個需求,於是我就寫在了一個Api,前端和後臺都可以共用這個介面。

    ​ 於是,他就覺得這樣不行,要求我拆分開來。 我問他原因呢,他又說不出來,我以為他不瞭解需求,就不斷的向他講述,最後沒有用,結果自然鬧得很僵。

    ​ 我們就這樣僵了兩三天吧,他就找我談話了,說要我適應環境,把業務都寫在一個Function 裡,因為昨天同事看了我的程式碼,跳來跳去的,看不懂~ ,

    ​ 我說我可以對我這塊業務寫個詳細的文件,這也不行,無奈下,我也只好妥協。剛來不久,很多東西都不能硬性的去改變,也只能去適應他們的開發方式。

    ​ 接著,他對我的介面設計又有意見了。社群下的帖子和商學院裡的課程都能評論,回覆,點贊。

    於是我把這些各自寫成一個介面,只需要傳引數識別是課程還是帖子就行了。他要求我把這些拆分出來,就是說課程的評論和帖子的評論不能一個介面。百般的解析下,無用,我也只好再一次妥協。

修改後的對比

修改後的程式碼我真的不想看~ 感覺要被後面的人挖祖墳~~

就簡單帖一個建立評論操作的對比吧~

修改前:

  1. 建立評論操作入口
    /**
     * 建立評論
     * @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());
        }
    }
  1. 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'
        ];
    }
}
  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;
    }
  1. 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裡。實在沒眼看~~

  1. 入口(建立文章評論)
    /**
     * 建立評論
     * @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());
        }
    }
  1. 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;
    }

建立課程評論 又需要 重新差不多的程式碼~~~

總結

​ 我發這篇文章的本意並不是如何的抬高自己,貶低別人,我也不認為自己寫得有多好,寫一些業務程式碼,沒什麼值得驕傲的。通過這件事,我領悟到了,有時候有些事情,就算你很不喜歡,很不樂意,為了生活,也得適當的妥協。成長,就是不斷向自己妥協的過程。

這種環境並不是我向往的,但是生活所迫,暫時任性不了,我還是會保持我的個性。

相關文章