Selamun Aleyküm, öncelikle hayirli cumalar. Acik kaynak olarak gelistirdigim bir projem var.Admin / Siparisler / Siparis ID sayfasinda siparis ürünlerinin yönetimini bir liste ile yapiyorum. Silme islemi ve güncelleme islemini bu sekilde yaptim ama SOLID prensiplerine uyuyormu? birde yukarida yaptigim dökümantasyon dogrumu özellikle @return parametresi.

Tekrardan tesekkürler.

Kullanilan Cati : Laravel 5.2

   /**
     * Send Order Product with a newly Qty and Price on the Order Product Controller
     * 
     * @param int $order_id
     * @param array $deleteCheckbox
     * @param array $products
     * @param array $qtys
     * @param float $prices
     * @return bool OrderProductController::destroy() | OrderProductController::update() 
     */
    public function updateOrderProducts($order_id, $deleteCheckbox, $products, $qtys, $prices) {
        for ($i = 0; $i < count($products); $i++) {
            if (isset($deleteCheckbox[$i])) {
                $status = OrderProductController::destroy($order_id, $products[$i]);
              } else {
                $status = OrderProductController::update($order_id, $products[$i], $qtys[$i], $prices[$i], $prices[$i] * $qtys[$i]);
            }
        }
        return $status;
    }

soruldu: 15 Tem, 05:19

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

değiştirildi: 15 Tem, 07:12


SOLID prensipleri tek metod üzerinden anlaşılacak birşey değildir, bu yüzden yorum satırları üzerinden @return vs. kullanarak anlaşılamaz ve SOLID sağlanamaz. Yazılımın genel yapısıyla ilgilidir.

Ama eğer bakacak olursak, bir değişkene göre silme ve güncelleme işlemini değiştiriyor ve single responsibility'e aykırı.

$status döndürüyorsun ve o statüs döngü içinde yani bir tanesi hatalı olsa bile en son çalışan doğruysa başarılı oluyor. burda da bir algoritmik hata var denilebilir.

Diğer maddeler ile ilgili yorum yapılamaz bir metod üzerinden, yazılımdaki yapıyı yansıtmıyor çünkü. ve static metodlar daha oop'e pek uygun değil. yani laravelin kendisininde tam OOP olduğunu söylemek pek doğru olmaz.

burdaki ustalar daha net bir bilgi verebilir..

permanent link

cevaplandı: 17 Tem, 13:41

Kaz%C4%B1m's gravatar image

Kazım
1.5k414
cevap kabul oranı: 34%

Yazilim gelen yapisi veya methodlari ve classlari bu sekilde "single reponsibility principle" mantiginda yapmaya calistim.

Burdaki sorun veya sorum( yeteri kadar bu prensipe uygun tecrübe olmadigi icin) genel mantigi anlatan en bariz kod parcasini paylasmakta bulmustum cözümü..

Status döngüsünde hatali olmamisi icin request'te sorgulamasi var, form kontrolü onun üzerinden yapiliyor. Yani bu methodu cagiran üst ana update() methodu yapiyor dogrulama islemini. Satirlarda bir hata veya eksik varsa daha bu methoda gelmeden islem duruyor.

proje github'da bulunmakta, bu konuda tecrübeni ve gördügün hatalari paylasmak istersen cok sevinirim. Tekrardan cevabin icin cok tesekkürler.

Sinifin tamami:

<?php

namespace App\\Http\\Controllers\\Admin;

use Illuminate\\Http\\Request;
use App\\Http\\Requests;
use App\\Http\\Controllers\\Controller;
use App\\Http\\Controllers\\Admin\\OrderProductController;
use App\\Http\\Requests\\Admin\\OrderUpdateRequest;
use App\\Order;
use App\\Currency;
use App\\User;
use Flash;

class OrderController extends Controller {

    /**
     * Display a listing of the resource.
     *
     * @return \\Illuminate\\Http\\Response
     */
    public function index() {
        $orders = Order::all();
        return view('admin/order.index')
                        ->with('orders', $orders);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \\Illuminate\\Http\\Response
     */
    public function create() {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \\Illuminate\\Http\\Request  $request
     * @return \\Illuminate\\Http\\Response
     */
    public function store(Request $request) {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \\Illuminate\\Http\\Response
     */
    public function show($id) {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \\Illuminate\\Http\\Response
     */
    public function edit($id) {
        $order = Order::find($id);
        $currencies = Currency::lists('title', 'code');
        $users = User::lists('name', 'id');
        return view('admin/order.edit')
                        ->with('order', $order)
                        ->with('currencies', $currencies)
                        ->with('users', $users);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \\Illuminate\\Http\\Admin\\OrderUpdateRequest  $request
     * @param  int  $id
     * @return \\Laracasts\\Flash\\Flash string Process message
     * @return \\Illuminate\\Http\\Response
     */
    public function update(OrderUpdateRequest $request, $id) {

        /**
         * orderproduct_delete is delete Checkbox's from Admin / Order / Order / **Order Product List** Form
         */
        echo $this->updateOrderProducts($id, $request->orderproduct_deleteCheckbox, $request->orderproduct_product_id, $request->orderproduct_qty, $request->orderproduct_price);

        $order = Order::find($id);
        $order->user_id = $request->user_id;
        $order->payment_name = $request->payment_name;
        $order->payment_company = $request->payment_company;
        $order->payment_address = $request->payment_address;
        $order->payment_city = $request->payment_city;
        $order->payment_postcode = $request->payment_postcode;
        $order->payment_country = $request->payment_country;
        $order->payment_currency = $request->payment_currency;
        $order->payment_method = "0";
        $order->shipping_name = $request->shipping_name;
        $order->shipping_company = $request->shipping_company;
        $order->shipping_address = $request->shipping_address;
        $order->shipping_city = $request->shipping_city;
        $order->shipping_postcode = $request->shipping_postcode;
        $order->shipping_country = $request->shipping_country;
        $order->shipping_method = "0";
        $order->total = $this->getTotalPriceOrderProducts($id);
        $order->status = $request->status;
        if ($order->save()) {
            Flash::success(trans('admin/order/index.success_order_updated'));
            return redirect()->back();
        } else {
            Flash::error(trans('admin/order/index.error_order_not_updated'));
            return redirect()->back();
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \\Laracasts\\Flash\\Flash string Process message
     * @return \\Illuminate\\Http\\Response
     */
    public function destroy($id) {

        $order = Order::destroy($id);
        $order_products = $this->destroyOrderProducts($id);

        if ($order && $order_products) {
            Flash::success(trans('admin/order/index.success_order_and_order_products_deleted'));
            return redirect()->back();
        } else {
            Flash::error(trans('admin/order/index.error_order_and_order_products_not_deleted'));
            return redirect()->back();
        }
    }

    /**
     *  Remove the saved Order Products from storage
     * 
     * @param   array $order_id
     * @return  bool  $status
     */
    public function destroyOrderProducts($order_id) {
        return OrderProductController::destroyOrderProducts($order_id);
    }

    /**
     * Send Order Product with a newly Qty and Price on the Order Product Controller
     * 
     * @param int $order_id
     * @param array $deleteCheckboxs
     * @param array $products
     * @param array $qtys
     * @param float $prices
     * @return bool OrderProductController::destroy() | OrderProductController::update() 
     */
    public function updateOrderProducts($order_id, $deleteCheckboxs, $products, $qtys, $prices) {
        for ($i = 0; $i < count($products); $i++) {
            if (isset($deleteCheckbox[$i])) {
                $status = OrderProductController::destroy($order_id, $products[$i]);
              } else {
                $status = OrderProductController::update($order_id, $products[$i], $qtys[$i], $prices[$i], $prices[$i] * $qtys[$i]);
            }
        }
        return $status;
    }

    /**
     * Return Total Price from specified Order
     * 
     * @param int $order_id
     * @return float $totalprice
     */
    public function getTotalPriceOrderProducts($order_id) {
        return OrderProductController::totalPriceOrderProducts($order_id);
    }

}
permanent link

cevaplandı: 18 Tem, 03:02

kzorluoglu's gravatar image

kzorluoglu
1256914
cevap kabul oranı: 19%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×168
×2
×1

Soruldu: 15 Tem, 05:19

Görüntüleme: 249 kez

Son güncelleme: 18 Tem, 03:02

powered by BitNami OSQA