cari
Rumahpembangunan bahagian belakangtutorial phpSatu lagi Cara untuk Menstruktur Projek Symfony anda

Seni bina Perkhidmatan MVC adalah sangat biasa dalam projek Symfony yang dirasakan seperti satu-satunya cara. Ia mudah, biasa dan berfungsi... sehingga tidak. Apabila projek anda berkembang, keretakan mula ditunjukkan: logik perniagaan anda ada di mana-mana, gelagat apl tidak jelas dan mengekalkan kod menjadi menyakitkan. Walaupun ia adalah pendekatan yang paling biasa, Symfony tidak memaksa anda untuk terus menggunakannya.

Bagaimana jika ada cara yang lebih baik ?


Kekecewaan Menggunakan Seni Bina Perkhidmatan MVC

 

Logik Domain Tersebar Di Mana-mana

Apabila projek berkembang, logik perniagaan cenderung merebak ke seluruh pangkalan kod. Setiap lapisan projek — pengawal, perkhidmatan, borang, entiti — akhirnya mengandungi bit dan kepingan model domain. Ini menjadikannya semakin sukar untuk fokus pada mana-mana bahagian tertentu.

 

Sempadan Projek Tidak Jelas

Apabila seni bina anda disusun mengikut lapisan teknikal, ia menjadi lebih sukar untuk mengenal pasti sempadan yang jelas antara konteks yang berbeza apabila projek berkembang. Kekurangan kejelasan ini boleh menyebabkan kod dan cabaran penyelenggaraan yang diganding rapat.

Another Way to Structure your Symfony Project

 

Gelagat Projek Tidak Jelas

Memandangkan seni bina lalai menekankan lapisan teknikal, ia menjadi agak mencabar untuk memahami gelagat projek. Anda mungkin membuat kesimpulan bahawa entiti tertentu diuruskan oleh perkhidmatan tertentu atau meneka skema pangkalan data, tetapi gelagat sebenar projek, yang merupakan aspek yang paling penting, masih tidak jelas dan tersirat.

Another Way to Structure your Symfony Project

 

Kitaran Hayat Berbeza

Apabila logik perniagaan tersebar di seluruh projek dan dicampur dengan butiran pelaksanaan, ia menjadi sukar untuk mengembangkannya secara bebas. Dari masa ke masa, Kitaran hayat logik perniagaan cenderung menjadi lebih lama daripada butiran pelaksanaan (seperti rangka kerja, API pihak ketiga atau pangkalan data). Ketidakpadanan ini memaksa anda untuk menulis semula sebahagian besar kod apabila perubahan kecil berlaku dalam kebergantungan.


Cara Lebih Baik untuk Menstrukturkan Seni Bina Anda

 

Asingkan Logik Perniagaan

Untuk memudahkan memfokuskan pada logik perniagaan apabila diperlukan, langkah pertama ialah mengasingkannya daripada keseluruhan projek. Untuk mencapai ini, cipta folder Domain. Folder ini menjadi teras projek, di mana logik perniagaan dimodelkan menggunakan objek PHP tulen, bebas daripada pergantungan pada butiran pelaksanaan. Walaupun selebihnya projek bergantung pada folder ini, folder Domain tidak bergantung kepada sesiapa.

Di dalam folder Domain, fail hendaklah dikumpulkan mengikut tujuan domain dan bukannya tujuan teknikal. Ini bermakna tiada folder Entiti, Perkhidmatan atau Pengawal di sini, hanya nama folder yang sepadan dengan ciri atau konsep domain.

Another Way to Structure your Symfony Project

 

Pintu Depan Domain

Aspek yang paling penting dalam projek ialah apa yang lakukan, tindakan yang boleh dikendalikannya. Tindakan ini mewakili gelagat projek dan harus berfungsi sebagai satu-satunya cara untuk mengakses logik perniagaan. Untuk mencerminkan perkara ini, buat folder Application yang secara eksplisit mempamerkan semua gelagat projek. Sebagai contoh, sebagai pembangun baharu pada projek itu, saya sepatutnya dapat memahami sepintas lalu perkara yang mampu dilakukan oleh projek dengan melihat folder ini.

Another Way to Structure your Symfony Project

 

Menyambung ke Dunia Luar

Dengan folder Apl dan Domain, ia menjadi mudah untuk memfokuskan pada logik perniagaan. Walau bagaimanapun, pada satu ketika, logik perniagaan ini perlu berinteraksi dengan sistem luaran. Untuk mengendalikan perkara ini, buat folder ketiga yang dipanggil Infrastruktur, yang mengandungi semua butiran pelaksanaan seperti kod khusus rangka kerja, sambungan pangkalan data dan perpustakaan.

Fail dalam folder Infrastruktur bergantung pada fail Apl dan Domain. Contohnya, mereka mungkin memanggil pengendali aplikasi daripada folder Apl atau melaksanakan antara muka yang ditakrifkan dalam folder Domain.

Another Way to Structure your Symfony Project

Secara konkrit, dalam Symfony, ini melibatkan pengubahsuaian folder Pengawal dan mengisytiharkan perkhidmatan yang melaksanakan antara muka yang mana.

# config/routes.yaml

controllers:
    resource:
        path: ../src/Catalog/Infrastructure/Controller/
        namespace: App\Catalog\Infrastructure\Controller
    type: attribute

 

Dedahkan Sempadan

Apabila projek anda berkembang, anda mungkin dapati bahawa sesetengah bahagian logik perniagaan memerlukan ruang mereka sendiri dalam seni bina. Penunjuk yang baik ialah apabila istilah yang sama mula mempunyai makna yang berbeza bergantung pada konteks. Sebagai contoh, perkataan Produk mungkin merujuk kepada produk kilang, produk gudang atau produk e-dagang, masing-masing memerlukan modelnya sendiri. Objek tuhan juga boleh menjadi penunjuk yang baik; kelas Pengguna selalunya mempunyai jenis isu ini dalam projek Symfony.

Apabila ini berlaku, tiba masanya untuk mengekstraknya dan membiarkan logik perniagaannya berkembang secara bebas.

Sesetengah konteks akan membentuk teras projek anda, manakala yang lain akan menyokongnya. Konteks generik, seperti Auth, boleh menggunakan seni bina yang lebih ringkas kerana ia bukan pusat domain anda

Another Way to Structure your Symfony Project

Dalam gambar ini, kita dapat melihat bahawa konteks Auth menggunakan struktur Symfony standard, konteks Pesanan dan Katalog menggunakan seni bina tertumpu domain dan konteks Penghantaran menggunakan seni bina tertumpu ciri.

 

Modulariti Bertambah

Jika konteks tertentu berkembang ke tahap yang perlu diskalakan secara bebas, pertimbangkan untuk membahagikannya kepada unit penggunaan yang berasingan.

Walau bagaimanapun, jangan tergesa-gesa dalam langkah ini. Mulakan dengan menjadikan projek anda modular, dan jika anda perasan bahawa konteks perlu berskala secara individu, kemudian gunakannya secara berasingan.
Hanya bahagikan pangkalan kod jika timbul cabaran organisasi, seperti dua pasukan bergelut untuk bekerjasama dalam pangkalan kod yang sama.

Another Way to Structure your Symfony Project

Pergi Lebih Jauh
  • Simon Brown - Monolith Modular

Konsep

Semasa kami meneroka penyelesaian ini, kami menggunakan beberapa konsep ketukangan. Mari namakan dan terangkan secara ringkas, supaya anda boleh menyelami setiap satu dengan lebih mendalam.

 

Bahasa Ubiquitous

Di sebalik istilah luar biasa ini terdapat konsep yang sangat mudah. Bahasa di mana-mana ialah perbendaharaan kata yang digunakan oleh pasukan anda untuk menerangkan model domain anda. Perbendaharaan kata ini harus didokumentasikan dan digunakan secara konsisten di mana-mana, dalam perbualan produk, pangkalan kod dan seterusnya.

Secara konkrit, buat fail penurunan nilai pada akar Konteks Terhad dan kumpulkan orang produk, pakar domain dan pasukan teknologi untuk mentakrifkan setiap konsep projek anda.

Pergi Lebih Jauh

  • Eric Evans - DDD - Bab 2 : Komunikasi dan penggunaan bahasa
  • Martin Fowler - Bahasa Ubiquitous

 

Konteks Terbatas

Konteks bersempadan mentakrifkan sempadan linguistik dalam projek anda, memisahkan bahagian sistem di mana bahasa di mana-mana tidak sejajar lagi. Alatan seperti Peta Konteks dan Penyerbuan Acara boleh membantu mengenal pasti sempadan ini.

Konteks terikat ialah konsep abstrak; ia boleh dilaksanakan dalam pelbagai cara, daripada folder ringkas dalam monolit modular kepada gugusan dalam seni bina perkhidmatan mikro.

Pergi Lebih Jauh

  • Eric Evans - DDD - Bahagian IV : Reka Bentuk Strategik
  • Vaughn Vernon - IDDD - Bab 2 : Domain, Subdomain dan Konteks Sempadan
  • Martin Fowler - Konteks Terbatas

 

Pelabuhan dan Penyesuai, Heksagon, Bawang, dan Seni Bina Bersih

Semua seni bina ini bertujuan untuk mengasingkan logik perniagaan daripada butiran pelaksanaan. Sama ada anda menggunakan Pelabuhan dan Penyesuai, Heksagon atau Seni Bina Bersih, idea terasnya ialah menjadikan rangka kerja logik perniagaan-agnostik dan mudah untuk diuji.

Sebaik sahaja anda memikirkan perkara ini, terdapat spektrum penuh pelaksanaan dan yang terbaik bergantung pada konteks dan pilihan anda. Kelebihan utama seni bina ini ialah, dengan mengasingkan logik perniagaan anda, ia membolehkan ujian yang lebih cekap.

Pergi Lebih Jauh

  • Alistair Cockburn - Seni Bina Heksagon
  • Uncle Bob - Seni Bina Bersih
  • Herberto Graca - DDD, Heksagon, Bawang, Bersih, CQRS, … Bagaimana Saya Menggabungkan Semuanya

 

Seni Bina Menjerit

Idea untuk menyusun folder dan fail untuk "menjerit" logik perniagaan dikenali sebagai Screaming Architecture. Konsep ini menekankan bahawa struktur kod anda harus menjelaskan tujuan projek dengan segera. Matlamatnya adalah untuk pembangun baharu memahami perkara yang projek itu lakukan sepintas lalu.

Saya amat mengesyorkan membaca artikel Uncle Bob mengenai topik itu—perbandingannya dengan pelan rumah amat bernas.

Pergi Lebih Jauh

  • Uncle Bob - Seni Bina Menjerit

 

Seni Bina Menghiris Menegak

Penghirisan menegak menyusun projek anda mengikut ciri, membolehkan setiap ciri berkembang secara bebas. Ia membolehkan anda menggunakan seni bina yang berbeza pada ciri yang berbeza berdasarkan kerumitan dan kematangan.

Walaupun idea itu menarik, ia memerlukan jurutera berkemahiran tinggi untuk melaksanakan dan mengekalkan seni bina sedemikian dengan berkesan.

Pergi Lebih Jauh

  • Jimmy Bogard - Seni Bina Slice Menegak
  • CodeOpinion - Seni Bina Slice Menegak, bukan Lapisan!

Fikiran Akhir

Cara anda menstruktur projek Symfony anda mempunyai kesan yang mendalam pada kebolehskalaan, kebolehselenggaraan dan kejelasannya. Dengan mengasingkan logik perniagaan anda dan membuat tingkah laku yang jelas, anda akan mencipta sistem yang lebih mudah difahami dan berkembang.

Jika anda baru dengan idea ini, jangan risau, ketukangan perisian ialah satu perjalanan, bukan destinasi. Konsep ini mungkin kelihatan hebat pada mulanya, tetapi setiap satu akan membantu anda memberikan lebih nilai kepada perniagaan anda.

Ada soalan atau ingin berkongsi pengalaman anda? Letakkan mereka dalam komen! Dan nantikan artikel seterusnya ?

Atas ialah kandungan terperinci Satu lagi Cara untuk Menstruktur Projek Symfony anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Status Semasa PHP: Lihat trend pembangunan webStatus Semasa PHP: Lihat trend pembangunan webApr 13, 2025 am 12:20 AM

PHP tetap penting dalam pembangunan web moden, terutamanya dalam pengurusan kandungan dan platform e-dagang. 1) PHP mempunyai ekosistem yang kaya dan sokongan rangka kerja yang kuat, seperti Laravel dan Symfony. 2) Pengoptimuman prestasi boleh dicapai melalui OPCACHE dan NGINX. 3) Php8.0 memperkenalkan pengkompil JIT untuk meningkatkan prestasi. 4) Aplikasi awan asli dikerahkan melalui Docker dan Kubernet untuk meningkatkan fleksibiliti dan skalabiliti.

PHP vs Bahasa Lain: PerbandinganPHP vs Bahasa Lain: PerbandinganApr 13, 2025 am 12:19 AM

PHP sesuai untuk pembangunan web, terutamanya dalam pembangunan pesat dan memproses kandungan dinamik, tetapi tidak baik pada sains data dan aplikasi peringkat perusahaan. Berbanding dengan Python, PHP mempunyai lebih banyak kelebihan dalam pembangunan web, tetapi tidak sebaik python dalam bidang sains data; Berbanding dengan Java, PHP melakukan lebih buruk dalam aplikasi peringkat perusahaan, tetapi lebih fleksibel dalam pembangunan web; Berbanding dengan JavaScript, PHP lebih ringkas dalam pembangunan back-end, tetapi tidak sebaik JavaScript dalam pembangunan front-end.

PHP vs Python: Ciri dan Fungsi TerasPHP vs Python: Ciri dan Fungsi TerasApr 13, 2025 am 12:16 AM

PHP dan Python masing -masing mempunyai kelebihan sendiri dan sesuai untuk senario yang berbeza. 1.PHP sesuai untuk pembangunan web dan menyediakan pelayan web terbina dalam dan perpustakaan fungsi yang kaya. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan standard yang kuat. Apabila memilih, ia harus diputuskan berdasarkan keperluan projek.

PHP: Bahasa utama untuk pembangunan webPHP: Bahasa utama untuk pembangunan webApr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

PHP: asas banyak laman webPHP: asas banyak laman webApr 13, 2025 am 12:07 AM

Sebab mengapa PHP adalah timbunan teknologi pilihan untuk banyak laman web termasuk kemudahan penggunaannya, sokongan komuniti yang kuat, dan penggunaan yang meluas. 1) Mudah dipelajari dan digunakan, sesuai untuk pemula. 2) Mempunyai komuniti pemaju yang besar dan sumber yang kaya. 3) Digunakan secara meluas dalam platform WordPress, Drupal dan lain -lain. 4) Mengintegrasikan dengan ketat dengan pelayan web untuk memudahkan penggunaan pembangunan.

Di luar gembar -gembur: Menilai peranan PHP hari iniDi luar gembar -gembur: Menilai peranan PHP hari iniApr 12, 2025 am 12:17 AM

PHP kekal sebagai alat yang kuat dan digunakan secara meluas dalam pengaturcaraan moden, terutamanya dalam bidang pembangunan web. 1) PHP mudah digunakan dan diintegrasikan dengan lancar dengan pangkalan data, dan merupakan pilihan pertama bagi banyak pemaju. 2) Ia menyokong penjanaan kandungan dinamik dan pengaturcaraan berorientasikan objek, sesuai untuk membuat dan mengekalkan laman web dengan cepat. 3) Prestasi PHP dapat ditingkatkan dengan caching dan mengoptimumkan pertanyaan pangkalan data, dan komuniti yang luas dan ekosistem yang kaya menjadikannya masih penting dalam timbunan teknologi hari ini.

Apakah rujukan yang lemah dalam PHP dan bilakah mereka berguna?Apakah rujukan yang lemah dalam PHP dan bilakah mereka berguna?Apr 12, 2025 am 12:13 AM

Dalam PHP, rujukan lemah dilaksanakan melalui kelas lemah dan tidak akan menghalang pemungut sampah daripada menebus objek. Rujukan lemah sesuai untuk senario seperti sistem caching dan pendengar acara. Harus diingat bahawa ia tidak dapat menjamin kelangsungan hidup objek dan pengumpulan sampah mungkin ditangguhkan.

Terangkan kaedah sihir __invoke dalam PHP.Terangkan kaedah sihir __invoke dalam PHP.Apr 12, 2025 am 12:07 AM

Kaedah \ _ \ _ membolehkan objek dipanggil seperti fungsi. 1. Tentukan kaedah \ _ \ _ supaya objek boleh dipanggil. 2. Apabila menggunakan sintaks $ OBJ (...), PHP akan melaksanakan kaedah \ _ \ _ invoke. 3. Sesuai untuk senario seperti pembalakan dan kalkulator, meningkatkan fleksibiliti kod dan kebolehbacaan.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual