Thư viện / khung nào bạn đã bỏ qua vì quá phức tạp cho vấn đề đang giải quyết? [đóng cửa]


12

... và mã hóa chức năng "thủ công"?

Là một ví dụ khá ẩn dụ, bạn hầu như không cần một thư viện để giải các phương trình bậc hai, mặc dù các thư viện như vậy tồn tại và ai đó thực hiện chúng một cách nghiêm túc.

Như một trường hợp nghi vấn hơn, tùy thuộc vào hoàn cảnh tôi có thể bỏ jQuery (ví dụ khi tôi không cần hỗ trợ một số trình duyệt thời đồ đá): nó đơn giản hóa một số thứ nhưng nó lại thêm một lớp phức tạp và không đáng tin cậy vào DOM. Và việc lạm dụng jQuery dẫn đến các vấn đề vô lý, chẳng hạn như một vấn đề được thấy gần đây trên SO: làm cách nào để tôi gán một đoạn trống cho một athẻ với jQuery? Hóa ra đó là một câu hỏi HTML, thậm chí không phải là JavaScript.

Một trường hợp vô lý khác nhưng chưa rõ ràng đối với nhiều người là sử dụng một số công cụ / ngôn ngữ tạo khuôn mẫu được xây dựng trên đầu của một hệ thống tạo khuôn mẫu khác: PHP. Cấp độ thứ ba của ai?

Và một điều nữa: đôi khi chỉ cần tạo ra XML bằng (theo nghĩa bóng) printfthì dễ hơn nhiều so với thực hiện với một số công cụ XML quái dị.

Bất kỳ trường hợp khác từ kinh nghiệm của bạn?


4
Giống như bất kỳ công cụ nào khác, bạn sử dụng jQuery khi thích hợp. Bạn không sử dụng búa và đục để mở cửa trước nếu bạn có chìa khóa.
Robert Harvey

1
@Robert Harvey: tất nhiên nhưng trong công nghệ phần mềm, chúng ta thường gặp khó khăn trong việc nhận ra các phím và búa. Đó là những gì bài viết về.
mojuba

Hãy nhớ rằng cho dù thư viện phổ biến phức tạp đến đâu, thì đó là thứ tự độ lớn dễ hiểu hơn so với thư viện "đơn giản" tùy chỉnh của bạn, bởi vì chúng đã quen với nó.
Louis Kottmann

@RobertHarvey cửa của bạn phải có hình dạng tốt hơn nhiều so với của tôi.
Jimmy Hoffa

Câu trả lời:


14

Phần lớn thư viện doanh nghiệp MS và hầu hết các điều khiển của bên thứ 3 cho .net đã để lại cho tôi cảm giác này sau một chút sử dụng.

Số dặm của bạn có thể thay đổi


2
Đồng ý - hầu hết các thư viện Doanh nghiệp là khó hiểu hoặc không trực quan, với một cuộc diễu hành của các thư viện bên thứ ba làm việc tốt hơn. Nhưng tất nhiên, nếu bạn đặt tên Microsoft vào tiêu đề thì đó phải là một "cách thực hành tốt nhất"
Watson

trong những ngày đầu, entlib đã làm một số thứ khó thực hiện hoặc tìm ra với các khung công tác ban đầu ... ngày nay, nó dường như chủ yếu tương thích ngược với những ngày đầu hoặc các giải pháp được nướng một phần mà bạn thấy trong các bản phát hành trong tương lai hình thức tốt hơn.
Hóa đơn

13

Nền tảng truyền thông Windows

Thực tế là nó có hình con dao của quân đội Thụy Sĩ trên trang chủ loại tổng hợp tất cả cho tôi. Hãy tưởng tượng cấu hình XML dài gấp bốn lần mã thực tế mà bạn viết và vẫn rất khó để viết các dịch vụ SOAP có thể tương tác giữa C #, Java, PHP, Python và tất cả các ngôn ngữ khác mà nó được cho là "được cho là" có thể tương tác với ...

Trong tất cả các dự án trong tương lai, tôi sẽ gắn bó với REST.


2
WCF 4.0 không yêu cầu tệp cấu hình XML nào cả. Tôi không có bất kỳ kinh nghiệm nào về khả năng tương tác với các công nghệ khác (ngoài việc sử dụng WCF như một ứng dụng khách, hoạt động tốt), nhưng tôi có thể nói rằng tôi thấy nó vừa dễ dàng vừa trực quan. Mặc dù tôi đã bắt đầu sử dụng nó mà không cần đọc bất kỳ cuốn sách nào hoặc có bất kỳ khóa đào tạo nào (và có thời hạn để đáp ứng), tôi đã có thể bắt đầu chạy.
Allon Guralnek

4
Tôi đã đổi tên "WCF" thành "WTF".
MetalMikester

1
@ ALLon: Tôi sẽ thừa nhận tôi đã không thử WCF 4.0, hoàn toàn có thể họ đã cải thiện đáng kể trong lĩnh vực đó ...
Dean Harding

12

Một trong những vấn đề tôi gặp phải với những người "tự lăn lộn" là - trong khi cách tiếp cận của họ thường nhanh hơn và đơn giản hơn - nó cũng dễ bị giòn hơn, có lỗi, không đầy đủ và / hoặc có lỗi bảo mật .

Ví dụ đơn giản: có thể sử dụng printf để phát ra XML dễ hơn 10 lần so với sử dụng thư viện:

printf("<xml>%s</xml>", str);

nhưng bạn có nhớ để thoát khỏi các nhân vật đặc biệt trong str? Ví dụ ' <' và ' &'? Một số người có thể nói "không tôi không" và tiến hành viết bài này:

printf("<xml><![CDATA[%s]]></xml>", str);

Nhưng nó vẫn sẽ phát ra XML bị hỏng nếu strchứa chuỗi con " ]]>" ở bất cứ đâu trong đó. Vỏ cạnh - chắc chắn. Nhưng vẫn là một kịch bản hợp lệ có thể dẫn đến những vấn đề bất ngờ với hậu quả nghiêm trọng.

Có nhiều lúc và những nơi "tự lăn" có thể phù hợp, nhưng đôi khi phải mất rất nhiều kinh nghiệm và kiến ​​thức để xác định khi nào là phù hợp. Đó là lý do tại sao tôi thường khuyến khích các lập trình viên thích sử dụng các thư viện đã được thiết lập (nếu có) thay vì các thói quen tự thực hiện.


11

Log4Net

Thư viện là tốt, nhưng tài liệu là khủng khiếp. Đó là quá mức cho những gì tôi muốn làm.

Tôi đã sử dụng Trace thay thế.


1
Robert, bạn đánh tôi quá nó bạn vô lại! Tôi chỉ nhìn vào log4net và nghĩ "wow, những người nghe này thật tuyệt. Bây giờ tôi sử dụng nó như thế nào ..?" và sau đó tôi nghĩ rằng đến lúc tôi nhận ra tôi có thể tự viết.
JohnL

5
Thực sự - tôi sẽ phải không đồng ý một cách tôn trọng - nó không đơn giản hơn log.error ().
Watson

3
@Watson: Nếu nó thực sự đơn giản, tại sao bạn lại cần một khung?
Robert Harvey

Tôi sử dụng giải pháp thay thế của Object Guy mất vài phút để định cấu hình, do sự phức tạp không cần thiết của Log4Net bị loại bỏ.
cjmUK

7

Điểm chia sẻ

Đừng hiểu sai ý tôi, SharePoint thật tuyệt vời nếu bạn cần hầu hết mọi thứ đi kèm (và nó đi kèm rất nhiều!), Nhưng nếu bạn không biết bạn đang làm gì hoặc chỉ cần nó cho một hoặc hai điều này là MASSIVELY không xứng đáng với nỗ lực và cấu hình.


6

ASP.NET WebForms - Mặc dù là nhà phát triển web .NET, nó đã trở thành bánh mì và bơ của tôi trong một thời gian dài, kể từ khi tôi bắt đầu sử dụng khung MVC (và đến từ môi trường PHP / Smarty Template) - bạn nhận ra rằng đôi khi có những thứ tốt hơn cách để phát triển web và sự trừu tượng mà nó sử dụng là quá mức cần thiết và rò rỉ .


Tôi nghĩ bạn có nghĩa là ASP.NET WebForms, khác với ASP.NET MVC. Chính xác?
Eric King

@Eric - đúng rồi, tôi nên sửa cái đó!
Watson

3

Trong hầu hết mọi trường hợp tôi đã làm điều này, cuối cùng tôi đã hối hận:

  • Sử dụng các hàm oci_ * của PHP thay vì thư viện trình bao bọc hóa ra là một động thái xấu vì khả năng duy trì mã. Việc chuyển tất cả mã sang Zend_Db đã giúp việc phát triển việc duy trì mã cơ sở dữ liệu dễ dàng hơn nhiều.
  • Lăn thành phần lưới ajax của riêng tôi, mất quá nhiều thời gian để phát triển hơn nữa, với tốc độ phát triển của một số thành phần lưới khác. Tôi hiện đang chuyển tất cả sang lưới Ext JS bởi vì với những thứ đó có rất nhiều chức năng của bên thứ ba có sẵn.
  • Tránh các thư viện như nguyên mẫu và jquery dẫn đến sự cố lặp lại các vấn đề trên trình duyệt, thường khó theo dõi. Cổng Ext JS đã giải quyết các tai ương trên trình duyệt chéo của tôi. Đó là phép thuật, ngay cả khi đó là một khuôn khổ rộng lớn mà tôi phải mất hàng tuần để hiểu.

Tôi đã đi đến kết luận rằng sẽ tốt hơn nhiều nếu chọn một vài khung công tác bên thứ ba đáng tin cậy và sử dụng chúng làm nền tảng cho mọi thứ bạn làm. Những khung đó được phát triển và gỡ lỗi bởi một người khác, đó là một trình tiết kiệm thời gian đáng kinh ngạc một khi bạn đã chuẩn hóa chúng và hiểu rõ về chúng.


+1. Và nó giúp nếu các thư viện đó là nguồn mở. Hãy tiếp tục và tải mã nguồn về tất cả các thư viện bạn đang sử dụng, nếu bạn chưa có. Đọc mã nguồn của thư viện là một cách tuyệt vời để chẩn đoán và khắc phục sự cố, cũng như cơ hội học hỏi từ mã của các lập trình viên khác (có lẽ là chất lượng khá cao).
Mike Clark

2

System.Text.RegularExpressions

Regex rất phức tạp và quá chậm. Tôi sẽ rất hiếm khi sử dụng Regex và thường viết phân tích cú pháp và so khớp văn bản của riêng tôi.

Thỉnh thoảng tôi sẽ thấy Regex hữu ích cho việc kết hợp thực sự phức tạp.


Bạn có biên dịch regrec đúng cách [hoặc có thể System.Text.RegularExpressions chậm hơn Perl & co. thực hiện]?
Maciej Piechotka

3
Regex có thể tương đối chậm so với phân tích chuỗi thủ công, nhưng nó nhanh hơn nhiều người nghĩ và thường là đủ nhanh cho hầu hết các ứng dụng thực tế.
Mike Clark

2
Tôi không nghĩ rằng đây thực sự là một khiếu nại về việc triển khai .NET, vì không có gì đặc biệt phức tạp hoặc chậm về nó (thực tế, tôi đã thấy nó là một trong những triển khai nhanh hơn hiện có). Ít nhất, đó là kinh nghiệm của tôi. Tất nhiên, các biểu thức thông thường nói chung dễ trở nên phức tạp và chắc chắn xu hướng mọi người sử dụng chúng ở những nơi hoàn toàn không phù hợp.
Dean Harding

2

Không phải Delphi4PHP cần bất kỳ báo chí xấu nào, nhưng tôi đã thử nó (phiên bản 2.0) và cực kỳ khó khăn để uốn cong nó theo ý muốn của tôi. Tôi muốn sử dụng nó để tạo một ứng dụng web theo phong cách youtube cho khách hàng để xem các video đào tạo, nhưng nó quá cồng kềnh và khi tôi thử kết hợp các khung công tác PHP (VCL4PHP, Zend, Smarty và Recess), tôi đã gặp phải sự đổi tên không thể tránh khỏi tất cả mọi thứ vì không có không gian tên trong vấn đề PHP 5.

Điều đó đã được nói, cuối cùng tôi đã không tự lăn. Tôi đã sử dụng chỉ học được từ những sai lầm của mình và quyết định giữ nó rất đơn giản và sử dụng CodeIgniter và FlowPlayer (với JQuery).

Tôi đã khao khát rằng bất kỳ khung công tác nào làm cho nó tồn tại trong PHP 5, PHP 6 sẽ có một số khung tuyệt vời có thể thực sự chơi tốt với nhau.


2

Weka

Tôi làm rất nhiều công việc học máy, và nếu tôi chỉ cần một cái gì đó đơn giản như Naive Bayes hoặc hồi quy logistic, tôi thích bỏ Weka. Nó có các triển khai tốt đối với một số thuật toán học máy khá phức tạp, nhưng API là một API Java trường học cũ (hướng tiền chung) được định hướng quá mức. Những điều làm tôi khó chịu về nó:

  1. Nó cuộn mảng có thể thay đổi kích thước của riêng nó mà không có gì khác sử dụng, đảm bảo công việc bận rộn chuyển đổi qua lại.

  2. Rất nhiều khớp nối liên tiếp trong đó các phương thức phải được gọi theo một thứ tự cụ thể và trừ khi bạn thực sự cẩn thận RTFM, bạn sẽ không nhận ra điều đó.

  3. Mọi trường hợp phải là một đối tượng Instance và tôi phải khai báo rõ ràng với một đối tượng Thuộc tính cho dù đó là danh nghĩa hay số. Điều này dẫn đến rất nhiều công việc bận rộn chuyển đổi dữ liệu sang dạng mà Weka muốn. Điều này đặc biệt khó chịu vì API Weka đưa ra rất nhiều trường hợp ngoại lệ rằng việc biên dịch mã không có nghĩa là nó có khả năng hoạt động bằng mọi cách. Nếu tôi đang thiết kế API, tôi sẽ tự do trong những gì tôi đã chấp nhận (có thể chỉ cần lấy một mảng Object) và chỉ xem xét dữ liệu để tìm ra những gì tôi nhận được và những gì phải làm với nó.


2

Trong một dự án cụ thể, tôi đã bỏ EJB3. Nó đã cho tôi tiêm phụ thuộc và xử lý giao dịch container được quản lý. Nhưng nó giới thiệu các phụ thuộc rất lớn (ví dụ JBoss) và khiến hệ thống khó viết các bài kiểm tra tự động. Bây giờ tôi đã loại bỏ nó xuống tiêm phụ thuộc hàm tạo JPA +.


1

Phát ra HTML trên một cổng gỡ lỗi trên một ứng dụng. Tôi cần một số cách đơn giản để có được một số dữ liệu hiện tại (với làm mới tự động). Kéo vào một thư viện để định dạng nó sẽ là tốt, nhưng nó chỉ dễ dàng hơn để in nó.

Tôi cũng đã từ chối thư viện cho người khác: Chúng tôi sử dụng một thư viện XML lớn, phức tạp trong hầu hết các công cụ của chúng tôi. Sau khi dành 4 giờ một ngày để cố gắng làm cho nó hoạt động trong một ứng dụng mới, tôi chỉ nói 'túi nó' và lấy TinyXML. Không có nơi nào mạnh mẽ như vậy, nhưng cần ít nỗ lực hơn để khiến nó làm những việc đơn giản.


1

Gần đây tôi đang làm việc trên một trình biên dịch ngôn ngữ kịch bản mà tôi có thể sử dụng trong các ứng dụng của mình. Tôi đã sử dụng những người khác, nhưng không ai làm chính xác những gì tôi cần họ làm. Vì vậy, tôi tìm tại sao không cố gắng viết của riêng tôi? Nó có thể là một hoặc hai năm trước khi nó thực sự phù hợp để sử dụng chung, nhưng không sao. Thêm vào đó, nó là một kinh nghiệm học tập tuyệt vời.

Một giải pháp 'roll my own' khác là các phần được sử dụng để dịch các ứng dụng của tôi. Có thư viện hiện có, nhưng tôi không thích bất kỳ thư viện nào trong số đó. Vì vậy, tôi đã làm cho riêng mình.

Và các thành phần cơ sở dữ liệu của Delphi's. Tôi ghét Luôn luôn có. Vì vậy, tôi đã tạo giao diện cơ sở dữ liệu của riêng mình, hoạt động theo cách tôi muốn một cái hoạt động (và chính xác như giao diện tôi đã tạo cho PHP hoạt động, giúp mã hóa qua các ngôn ngữ dễ dàng hơn).

Về cơ bản, khi được cung cấp một tùy chọn, tôi thường kết thúc việc tạo thư viện của riêng mình.


Tôi hiểu bạn muốn nói gì. Tôi có thể chỉ cho bạn toàn bộ kho STL pha chế tại nhà, trừu tượng DB, toàn bộ ngôn ngữ với trình biên dịch hoặc trình thông dịch của họ, và những gì không. Nó thường không được các đồng nghiệp và quản lý của bạn hoan nghênh, nhưng lập trình viên nào không bao giờ viết trình biên dịch ngay cả khi không ai quan tâm đến nó?
mojuba

0

Ồ, rất nhiều. Tôi đã làm việc trên một vài dự án nhanh nhẹn bằng cách sử dụng apis nguồn mở. Tuyệt vời khi họ làm việc, nhưng chúng tôi thường phải chịu đựng các nhà phát triển với sự tôn sùng vì đã đưa vào tất cả các loại apis của bên thứ 3, một số không rõ ràng, một số không, chỉ vì họ muốn sử dụng một hoặc hai lớp trong đó. Kết quả cuối cùng là một mớ hỗn độn của mã và hack các hệ thống với nhau. Họ trao nó và tuyên bố đó là mã tốt nhất từ ​​trước đến nay, những người nghèo và những người nghèo nhặt nó tìm thấy một mớ hỗn độn khó hiểu, không có giấy tờ đầy những vấn đề phụ thuộc và hack.

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.