Bạn có thể thực hiện các mẫu thiết kế trong thời hạn chặt chẽ không?


8

Tôi tự hỏi, trong thời hạn chặt chẽ, ai có thời gian để thực hiện các mẫu thiết kế? Đó là rất nhiều công việc và lập trình trên đầu để có được nó ngay lần đầu tiên và trong khung thời gian. Tôi biết rằng nó có lợi thế lâu dài, nhưng bạn có thể thực hiện bất kỳ mẫu thiết kế nào một cách chính xác khi khách hàng ngồi trên đầu bạn và áp lực đang gia tăng.

Tôi nghĩ rằng một khi phiên bản đầu tiên của bạn được phát hành và bạn có nhiều thời gian cho phiên bản tiếp theo, bạn có thể nghĩ đến việc cải thiện chất lượng mã và khả năng quản lý với các mẫu thiết kế.


3
"Một khi [...] bạn có nhiều thời gian cho lần phát hành tiếp theo ..." - không phải điều này giống như nói "ngay khi địa ngục đóng băng ..."?
nikie

1
Âm thanh như đỏ, xanh lá cây, tái cấu trúc.
Công việc

Câu trả lời:


31

Đó là rất nhiều công việc và lập trình trên đầu để có được nó ngay lần đầu tiên và trong khung thời gian.

Điều đó là sai.

Không có lợi ích của một người nào đó đã nghĩ qua mẫu thiết kế, và giải thích nó và ghi lại nó, nó sẽ khó gấp đôi.

Một mẫu thiết kế đơn giản hóa tất cả những suy nghĩ và tự hỏi và quyết định.

Bạn không phải phát minh ra một cái gì đó mới. Bạn có thể sử dụng một cái gì đó đã được hiểu rõ bởi chính bạn và những người khác.


Có lẽ bạn thích sử dụng một khung công tác sẵn sàng như MVVM Lite Toolkit hoặc OpenRasta?
RPK

2
@RPK: Không. Các mẫu thiết kế giúp lập trình dễ dàng hơn bằng cách cung cấp cách hiểu vấn đề và cách giải quyết vấn đề. Các khung tình cờ được xây dựng xung quanh các mẫu thiết kế, nhưng không thành vấn đề. Tôi sử dụng các mẫu thiết kế bên trong các khung và các khung bên ngoài mọi lúc.
S.Lott

Tôi nghĩ rằng nhận xét đó là về việc làm một cái gì đó nhanh chóng và bẩn thỉu bây giờ hơn là làm nó một cách tốt nhất.
unolysampler

2
@RPK: "Khi chúng tôi không sử dụng chúng, chúng tôi không thể viết các ứng dụng tốt hơn?" Không. Ngày nay có nhiều lập trình viên không biết nhiều mẫu thiết kế và triển khai phần mềm xấu từ từ. Khi họ học các mẫu thiết kế, họ viết phần mềm tốt hơn nhanh hơn.
S.Lott

2
@Chad: "Bạn vẫn có thể viết phần mềm xấu bằng cách sử dụng các mẫu thiết kế". Vì nó hoàn toàn đúng về mọi công nghệ, nó là một tautology. Nó không có vẻ hữu ích để lặp lại nó, vì nó luôn luôn đúng.
S.Lott

13

Các mẫu thiết kế cho phép bạn suy nghĩ ít hơn. Đó thực sự là toàn bộ điểm. Có một chút sai lệch giả định trong câu hỏi. Nó gợi ý rằng bạn hoặc sử dụng các mẫu thiết kế hoặc bạn hoàn toàn không sử dụng các mẫu nào. Thực tế là sự lựa chọn là giữa việc sử dụng một mẫu đã được thiết lập hoặc một mẫu được làm tại nhà. Đôi khi thiết kế của bạn sẽ tốt hơn so với cách tiếp cận được giới thiệu, nhưng ... thông thường nó sẽ không như vậy. Tại sao phải trải qua tất cả các công việc giải quyết một vấn đề đã được giải quyết tốt. Phiên bản nửa nướng của riêng bạn sẽ không bao giờ tốt như vậy, và bạn phải lãng phí tất cả những gì dị ứng khi nghĩ về nó.


3
+1: "Các mẫu thiết kế cho phép bạn suy nghĩ ít hơn."
S.Lott

Đã đồng ý. Phong cách làm tại nhà với khả năng tái sử dụng đơn giản đã làm việc tốt cho tôi trong nhiều năm. Đến ngày tôi không thấy có vấn đề gì trong việc mở rộng và duy trì ứng dụng. Tôi chắc chắn muốn theo một mô hình đã được thiết lập, nhưng một lần nữa nó đòi hỏi tôi phải đủ chín chắn như mô hình. Nếu bạn có sự hiểu biết thấu đáo về một mô hình đã được thiết lập, con đường rất dễ dàng mà bạn không thể mong đợi để giao hàng đúng giờ tùy thuộc vào sách và diễn đàn.
RPK

Các mẫu thiết kế phù hợp cho phép tôi suy nghĩ ít hơn. Kỳ lạ thay, tôi chưa bao giờ cần phải truy cập internet để tìm tên của một người thiết kế phù hợp với mục đích sử dụng của tôi. Tôi chỉ nghĩ ra một cách để cấu trúc lại mã mà không biết tên của các mẫu mà tôi vừa gọi. Điều này không đúng với cấu trúc dữ liệu và thuật toán. Phát minh lại những thứ đó sẽ rất khó, và do đó nó có ý nghĩa để học hỏi từ những người khác. Các mẫu thiết kế chủ yếu là thông thường. Nhiều người nên và một số là một phần của thư viện hoặc ngôn ngữ. Một số mẫu thiết kế phát sinh do giới hạn của ngôn ngữ OO điển hình.
Công việc

8

Theo kinh nghiệm của tôi, nhanh & bẩn là một oxymoron. Bất cứ lúc nào bạn có thể tiết kiệm bằng cách lướt qua thiết kế hầu như luôn luôn bị tiêu tốn bởi việc gỡ lỗi thêm.


2
+1: Nhanh và bẩn là một Oxymoron , không thể diễn đạt nó ngắn hơn! Tôi đã thấy quá nhiều người bắt đầu thực hiện bây giờ . Chúng tôi là nhà phát triển và do đó chúng tôi viết mã, nhưng điều đó không có nghĩa là tất cả những gì chúng tôi làm là gõ trên bàn phím. Suy nghĩ đầu tiên không phải là lãng phí thời gian ...
Matthieu M.

1: "Quick and Dirty: ngay bây giờ" trở thành "chậm và bẩn: dài hạn", "chậm và sạch: ngay bây giờ" trở thành "Quick and Clean: Thuật ngữ lon" ;-)
umlcat

@Karl: Tôi không muốn nêu tên một vài công ty vì tên đó nằm trong Fortune 50. Gần đây, một nhân viên nói với tôi rằng các công ty đang phải trả giá đắt cho các mô hình được triển khai kém. Nó chỉ là giữ ứng dụng. chạy mà không nghĩ đến lợi ích mở rộng trong tương lai. Dự án phải được giao trước thời hạn và không có thời gian để cải thiện chất lượng.
RPK

Không ai tuyên bố việc sử dụng các mẫu thiết kế đơn thuần đảm bảo chất lượng, nhưng có thiết kế phù hợp ở phía trước không chỉ giúp chất lượng lâu dài, giúp cho việc đưa phiên bản đầu tiên ra khỏi cửa nhanh hơn. Nếu các mẫu thiết kế lạ mắt đang cản trở điều đó, thì bạn đã làm sai.
Karl Bielefeldt

4

Đừng cam kết với thời hạn không cho bạn đủ thời gian để làm việc đúng. Cuối cùng bạn đã phải trả lại khoản nợ kỹ thuật, và bạn càng có nhiều mã trước khi bạn bắt đầu tái cấu trúc mọi thứ thành một thiết kế lành mạnh, nó sẽ càng khó hơn. Điều đó có nghĩa là thậm chí THÊM công việc và lập trình trên cao.


Cười lớn. Đó là tốt.
RPK

2

Danh sách các mẫu thiết kế rất dài (mọi người thích đặt tên cho mọi thứ). Ngay cả khi bạn không đặt suy nghĩ vào "Ok, ở đây tôi đang sử dụng _ here", điều bạn đang làm có khả năng là một mô hình mà ai đó đã đặt tên. Bạn càng lập trình nhiều, bạn sẽ càng có nhiều ý tưởng về cách làm một cái gì đó và bạn sẽ càng ít phải lo lắng về những mẫu bạn đang sử dụng.


1
Đúng. Ngay cả Script Script là một mẫu thiết kế. Đặt tên mẫu chỉ tạo điều kiện cho cuộc trò chuyện.
pdr

2

Tôi nghĩ rằng một khi phiên bản đầu tiên của bạn được phát hành và bạn có nhiều thời gian cho phiên bản tiếp theo, bạn có thể nghĩ đến việc cải thiện chất lượng mã và khả năng quản lý với các mẫu thiết kế.

Tôi chia sẻ một tình huống tương tự. Để bảo trì các ứng dụng, có thể cần phải tái cấu trúc rộng rãi để làm cho mẫu thiết kế có giá trị. Nếu có một thời gian chết lớn xung quanh góc thì tốt nhất nên tắt cho đến khi bạn có thời gian để khắc phục vấn đề.

Đặc biệt nếu khách hàng đang yêu cầu một sản phẩm ngày hôm qua. Tam giác chất lượng phần mềm tồn tại cho dù bạn thừa nhận hay biết về nó. "Làm cho đúng ngay lần đầu tiên" thường yêu cầu lập kế hoạch trả trước nặng nề bao gồm các yêu cầu tốt và creep phạm vi thấp. Điều này có nghĩa là khách hàng phải sẵn sàng tham gia tích cực vào thành công chung của dự án.

Ngoài ra, hãy nhớ rằng OO 101 yêu cầu một người xây dựng một phần cho đến khi hoàn thành các yêu cầu. THEN tái cấu trúc, nếu không bạn chỉ quay bánh xe của bạn.


2

Nó không phải là nhiều công việc và chi phí để có được nó ngay lần đầu tiên.

Nếu nó không bị hỏng thì cơ hội sẽ không được sửa. Và không đúng không có nghĩa là bị hỏng. Sẽ luôn có một cái gì đó khác cần được thực hiện. Vì vậy, bạn sẽ dành nhiều thời gian hơn để hỗ trợ nó và ít thời gian hơn để sửa nó hoặc tạo ra một cái gì đó mới.

Không chỉ làm điều đó đúng không mất nhiều thời gian hơn làm sai. Nó có thể xuất hiện trong thời gian ngắn giống như bạn không đáp ứng các thời hạn hoặc cột mốc quan trọng. Nhưng cuối cùng tất cả kết hợp lại trong cùng một khoảng thời gian. Nhưng chất lượng của Bản phát hành QA đầu tiên sẽ vượt xa bản phát hành qa đầu tiên về chỗ ngồi của bản dựng quần. Điều này sẽ làm giảm việc làm lại trước khi phát hành. Cuối cùng, làm đúng, không chỉ buộc, nó thắng mọi lúc.


2

Rất có thể, nếu bạn mất nhiều thời gian hơn để thực hiện một mẫu thiết kế, thì mẫu bạn đang cố sử dụng không phù hợp với vấn đề bạn đang cố gắng giải quyết. Bạn không nhận được "điểm thưởng" trong bài đánh giá mã tiếp theo của mình để triển khai một mẫu mới, vấn đề là có thể dễ dàng xác định các cách đã được chứng minh để giải quyết các vấn đề phổ biến. Các mẫu thiết kế là một cách để mọi người chia sẻ cách tiếp cận với những vấn đề này và có thể nói về nó theo các thuật ngữ chung.


Điểm thưởng duy nhất là tôi luôn nhận được nó ngay lần thứ hai. Điều này là do sau một vài tháng triển khai, cả khách hàng và tôi đều nhận ra những gì chúng tôi muốn. Nhiều người sẽ bốc khói với sự ngu ngốc này nhưng nó là như thế.
RPK

2

Rất có khả năng là bạn đã sử dụng các mẫu thiết kế, chúng chỉ là một phân loại chính thức cho các khái niệm kiến ​​trúc thường lặp lại.

Để sử dụng một sự tương tự xây dựng - nơi bạn có thể gọi một phần nhất định của tòa nhà là "phần tránh mưa và hơi nóng", một người nào đó thành thạo trong tòa nhà sẽ chỉ gọi phần đó là "mái nhà". Không có bất lợi nào mà tôi có thể thấy khi thực hiện một "mái nhà" trên một ngôi nhà trái ngược với việc thực hiện một "phần giúp tránh mưa và nắng nóng"

Chi phí chính là tìm ra những mẫu thiết kế phù hợp ở đâu, vì chúng thường khá trừu tượng khi nhìn ra ngoài bối cảnh. Bạn gần như chắc chắn sử dụng Facade / Factory trừ khi bạn viết thủ tục. Tôi thấy Observer, Strateg and Factory dễ dàng nhất để bắt đầu vòng đầu của tôi.


Tôi thích cách giải thích này. "Các mẫu thiết kế" đã trở thành một cụm từ bắt chước nhân sự thường chỉ có nghĩa là "một vấn đề mà ai đó đã giải quyết". Quá trình xác định xem giải pháp của bạn có được lợi từ việc áp dụng một mẫu thiết kế có giá trị hay không chỉ đơn giản vì nó buộc bạn phải suy nghĩ về vấn đề của mình theo thuật ngữ trừu tượng. Nếu bạn không làm điều này, rất có thể bạn không thực sự hiểu vấn đề bạn đã được yêu cầu giải quyết.
Stefan Mohr

1

Như những người khác đã lưu ý, làm cho nó ngay lần đầu tiên dĩ nhiên là rẻ nhất. Nhưng tôi cũng sẽ chỉ ra rằng bất kỳ chương trình nào xây dựng bất cứ điều gì rơi vào đâu đó trên phổ của mô hình chống mẫu. Bạn có đang thực hiện một cái gì đó một cách có trật tự hay không; Mã bị nhiễm 'goto' đang theo một mẫu, nó chỉ là thứ được nhận ra sớm là có thể gây hại. Nhưng lưu ý rằng tất cả các mã sôi xuống để nhảy và các nhánh tại một số điểm trong chu trình biên dịch. Không có gì sai khi nhảy: nó chỉ khiến những dự án lớn trở nên khó hiểu hơn.

Rất dễ bị nhầm lẫn bởi các mẫu xuất hiện tầm thường cho các trường hợp sử dụng đơn giản. Ngay khi bạn bắt đầu cần linh hoạt hơn, hầu hết các mẫu dễ vỡ sẽ thoái hóa thành các mẫu chống. Vì vậy, quy tắc của tôi là chỉ viết mã tôi có thể hiểu và có cơ hội gỡ lỗi hợp lý. Nếu tôi quyết định áp dụng một mẫu thông minh một cách mù quáng, tôi ít nhất phải thông minh như mã mẫu để gỡ lỗi nó. Vì vậy, điều quan trọng là đảm bảo rằng bạn đang cách ly và sử dụng các mẫu áp dụng trực tiếp cho vấn đề của bạn, rằng bạn đang tiếp cận vấn đề ở mức độ trừu tượng phù hợp và bạn có thể hiểu và gỡ lỗi mọi dòng trong mã của mình.

Một chìa khóa ở đây là tạo ra sự cân bằng phù hợp giữa các yêu cầu ngắn hạn và dài hạn. Hãy nhớ rằng viết mã tốt một cách nhanh chóng là điều bắt đầu từ các mẫu được hiểu rõ chắc chắn có thể hỗ trợ - mã spaghetti có vẻ nhanh hơn, đặc biệt là lúc đầu. Nhưng bạn sẽ nhanh chóng thấy những hạn chế của các mô hình chống trong bất kỳ dự án lớn nào, trong đó khả năng phân tách, mô đun hóa, v.v., trở nên vô cùng quan trọng.


1

Tôi đang chống lại hạt lúa và nói rằng họ có thể giúp đỡ nhưng thường đau nhất khi ở trong hoàn cảnh bạn mô tả.

Chúng giúp NẾU bạn rất quen thuộc với chúng VÀ (bạn có phạm vi kiểm tra tốt của tất cả các phần sẽ có hiệu quả HOẶC đây là mã hóa trường xanh).

Nhưng, thực sự, nếu bạn đang hỏi câu hỏi này thì bạn cũng vậy A. Đừng sử dụng các mô hình như một cách làm tự nhiên (vì nếu bạn không nghĩ sẽ hỏi, bạn sẽ chỉ làm mà không cần suy nghĩ) HOẶC B. Mã không tương thích với việc triển khai mẫu theo số lượng được phân bổ đến mức đơn giản là không thực tế khi sử dụng mẫu.


The code is so incompatible to the implementation of the patternNếu đó là trường hợp, thì đó là một sự lựa chọn mẫu kém hoặc mã không giải quyết được vấn đề. Bạn chọn một mô hình giải quyết vấn đề bạn gặp phải, không cố gắng bấm còi nhiều mẫu nhất có thể vào một dự án để có quyền khoe khoang!
Joel C

Câu trả lời là C: Tôi vẫn chưa đủ tự tin và đủ âm thanh để thực hiện chúng trong một dự án sản xuất. Như tôi đã viết ở đâu đó ở trên, một công thức làm tại nhà chỉ hoạt động tốt và chưa bao giờ có bất kỳ vấn đề nào với việc mở rộng và tái sử dụng. Tôi chắc chắn muốn theo tiêu chuẩn ngành nhưng không phải không nắm bắt kỹ lưỡng về chủ đề này.
RPK

1

Không. Có vẻ như cần có thời gian để áp dụng các thực tiễn tốt nhất (Mẫu thiết kế, MVC, bất kể) cho một vấn đề và không phải là tôi hoặc các nhà phát triển khác không biết rõ về Mẫu thiết kế.

Một số trong những thực hành tốt này, có thể được áp dụng ngay cả khi bạn đang vội, nhưng, một hệ thống tốt, cần có thời gian để thiết kế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.