Tôi hiện đang phát triển một ứng dụng PHP đang sử dụng cơ sở dữ liệu Access làm phụ trợ. Không phải bởi sự lựa chọn bạn hiểu ... cơ sở dữ liệu là những gì khách hàng sử dụng ban đầu và sử dụng nó là một phần của yêu cầu.
Một trong những vấn đề với cơ sở dữ liệu này là các tên cột có quy ước đặt tên điên rồ nhất mà bạn có thể tưởng tượng. Chữ hoa, chữ thường, dấu gạch dưới, dấu cách và chữ thường. Ví dụ: cột "giới tính" chứa ngày. Và do đó, cột "User2". Có nhiều hơn nhưng bạn có được ý tưởng.
Đối mặt với điều này, tôi quyết định tạo một mảng để ánh xạ các cột cơ sở dữ liệu với các biến PHP để chúng ta có thể tách mã khỏi sự điên rồ. Tuy nhiên đồng nghiệp của tôi tin rằng tôi đang quá phức tạp và chúng ta nên sử dụng tên cột của cơ sở dữ liệu cho các biến PHP tương ứng vì vậy chúng ta không cần phải đi qua mảng bản đồ để tìm những gì diễn ra.
Vì vậy, câu hỏi của tôi là điều này ... tôi đang làm điều đúng hay tôi làm phức tạp mọi thứ?Trên K.I.S.S và lát đường đi bộ
Trả lời
Tuyệt đối bạn đang đi đúng hướng. Nếu bạn không trừu tượng hóa sự điên rồ, cuối cùng bạn sẽ không chống lại bản thân điên rồ.
Đồng nghiệp của bạn có điểm hợp lệ, vì vậy tôi khuyên bạn cũng nên viết mã một cách dễ dàng để xác định dữ liệu để ánh xạ cột trong PHP.
Đây không phải là giữ nó đơn giản, đó là về việc trang bị thêm một nền tảng vững chắc để xây dựng dựa trên. Điều này khiến tôi lo ngại là kiểu thiết kế ngẫu nhiên này thường che giấu các quy tắc kinh doanh nhất định, những thứ như "... nếu giới tính là ngày thì họ phải mua một tiện ích tại một thời điểm nào đó, vì vậy họ không thể được phép trêu chọc lubdub ... "- điên tôi biết nhưng phổ biến hơn nó nên được.
+10 nếu tôi có thể. Không đưa vào sự điên rồ, nếu không mã của bạn sẽ được viết một lần, đọc không bao giờ. "Vì vậy, có biến $ dd, trong một số trường hợp có chứa địa chỉ người gửi, nhưng trong các trường hợp khác khoản thanh toán đến hạn. Số tiền này được xác định bằng số chấm trong biến $ punt. " (ví dụ thực tế (ya rly!)) – Piskvor
+1 cho "fribbish the lubdub" –
Tên là đặc biệt quan trọng. Nếu bạn muốn ứng dụng của mình có thể duy trì, hãy sửa chúng trước khi cơ sở mã phát triển hơn nữa.
Đây là câu hỏi hay vì nó nói đến trái tim của IMHO mã hóa.
Tôi sẽ đi với bạn và trừu tượng ra những cái tên xấu thành những cái tên có thể đọc được. Kết quả là một chút phức tạp cho nhiều hơn mã dễ hiểu và dễ hiểu hơn về mặt logic.
Để chơi Người bảo vệ của Devil, có điều gì đó cần phải nói vì không có một lớp không cần thiết của sự gián đoạn trong tải bộ nhớ ngắn hạn của bạn để làm việc với hệ thống. Khi đã quen thuộc với mã, bạn sẽ biết những gì diễn ra trong biến số nào, do đó, lợi ích chính là để ai đó mới nhặt mã từ đầu. Tuy nhiên, khắc phục vấn đề đó đúng cách cũng sẽ yêu cầu sửa chữa lược đồ cơ sở dữ liệu mà (a) là một cơ quan quan trọng của công việc, và (b) phần lớn làm cho vấn đề biến mất.
Không có câu trả lời đen trắng cho câu hỏi này và việc thiếu câu trả lời rõ ràng cho vấn đề cụ thể của bạn cho thấy rằng bạn có thể muốn để chó ngủ nói dối.
Mặt khác, nếu hoạt động dọn dẹp nằm trong giới hạn khả năng thì bạn có thể muốn thực hiện trên cơ sở loại bao thanh toán lại, từng bước sửa các tên cột DB khi có cơ hội.
Nó thực sự phụ thuộc vào ứng dụng lớn như thế nào, có hay không bạn có thể giữ tất cả những mâu thuẫn trong đầu của bạn. – Kibbee
Cách điên rồ này nằm, một khi ứng dụng phát triển vượt ra ngoài đồ chơi. Một khi tôi bắt đầu một dự án bắt đầu như thế: "bạn sẽ biết cái gì đi theo biến nào" .Tại thời điểm tôi bước vào, nó đã phát triển thành "không ai biết nó làm gì, đừng chạm vào". Bugs mất vài phút để sửa chữa mất giờ, thậm chí cả ngày để tìm. – Piskvor
Đồng ý. Ở mức độ phức tạp nhất định, bạn thực sự cần phải có một hệ thống được tổ chức tốt để có thể hiểu được nó. – ConcernedOfTunbridgeWells
Bạn không nói rằng bạn không thể đổi tên các cột trong Access, do đó .... làm điều đó! Một khả năng khác là tạo các khung nhìn cho mỗi bảng và đổi tên các cột trong khung nhìn. Sau đó thay vì làm việc với bảng Employees, bạn làm việc với view vEmployees. Nếu tôi nhớ chính xác, Access cho phép bạn cập nhật lượt xem cũng như chọn từ chúng.Nếu bạn đang sử dụng ORM với PHP, điều đó có thể không hỗ trợ cập nhật lượt xem.
Xin lỗi, quên làm rõ .. Cơ sở dữ liệu Access không thể thay đổi. –
Không nghĩ như vậy ... sau đó tôi đề nghị bạn thử xem cách tiếp cận. – RedFilter
Tôi sẽ không nói bạn đang làm phức tạp mọi thứ.
Eric Evan của cuốn sách Domain Driven Design có một thuật ngữ đáng yêu cho điều này: Anti Corruption Layer
mã hóa cứng các tên bảng và tên cột không bao giờ là một ý tưởng tốt ngay cả khi những cái tên có ý nghĩa.
Tôi không biết liệu việc sử dụng mảng có phải là giải pháp tốt nhất hay không. Tôi không thực sự quen thuộc với PHP nhưng tôi đã đi với một cái gì đó giống như chuỗi liên tục để lưu trữ các tên bảng. Trong các ngôn ngữ tôi làm việc trong điều này sẽ dẫn đến mã dễ đọc hơn.
Bạn đang rất không may mắn khi bị mắc kẹt với cơ sở dữ liệu này nhưng tôi nghĩ về toàn bộ cách trừu tượng hóa các tên trường thành một cái gì đó hợp lý hơn là thông minh hơn.
Tôi có lẽ sẽ tạo cấu trúc dữ liệu có chứa tên cơ sở dữ liệu, tên, loại và trường cho nội dung khi bạn kéo dữ liệu ra khỏi DB. Điều đó sẽ cho một cách thuận tiện để vẽ mọi thứ lại với nhau để bạn không chỉ chỉ ánh xạ lược đồ tên điên rồ.
Tuyệt đối bạn đang làm đúng. Theo tôi thì tốt hơn là nên thực hiện một số điều tỉnh táo ở đó. Về sau, bạn sẽ không bị vứt bỏ nếu họ quyết định thay đổi cơ sở dữ liệu đó hoặc bất kỳ tên cột nào của nó. Nếu bạn xây dựng bản đồ đúng cách, bạn chỉ cần cắm các bảng/cột mới ngay.
Nếu có gì, bạn đang làm cải thiện sự nhanh nhẹn của giải pháp tổng thể của bạn.
Tất nhiên tôi vẫn sẽ nói KISS áp dụng cho phương pháp lập bản đồ của bạn!
Sử dụng tên cột thích hợp trong phần cuối của ứng dụng là cách tốt nhất bạn có thể làm. Và bạn nên làm điều đó trừ khi bạn muốn phải tìm kiếm "những gì lĩnh vực đó được cho là một lần nữa?" khi bạn phải nhìn vào nó một lần nữa sau khi bạn đã làm một cái gì đó khác.
Điểm của đồng nghiệp của bạn không phải là quá phức tạp. Điều đó cũng hợp lệ.
Vì vậy, hãy đóng gói quyền truy cập vào các trường trong một phương thức hoặc phương pháp và có phương pháp đó thực hiện việc dịch. Sử dụng bản đồ này không phải là một vấn đề hiệu suất.
Thực tế việc đặt tất cả ánh xạ tới nguồn dữ liệu trong một đối tượng có thể giúp bạn nếu khách hàng của bạn xem xét lại sử dụng cơ sở dữ liệu thực. Và khách hàng thích thay đổi ý kiến của họ.
Tại sao không tạo bảng dữ liệu với các lớp bản đồ trên mỗi bảng. Sau đó, bạn có thể định nghĩa các phương thức lớp để truy cập các cột và cung cấp các phương thức cho bất kỳ tên nào bạn muốn. Sau đó, mã truy cập cơ sở dữ liệu datalayer là điều duy nhất cần biết về các tên cột thực. Tôi nghi ngờ rằng một người nào đó (có lẽ một số soneone) đã phát triển một khuôn khổ để làm điều này. Google "php orm".
Chỉ cần tạo chế độ xem ở nơi cần thiết nhất.
Sử dụng ORM, bạn sẽ sớm thay đổi db ...
Bạn vẫn cần duy trì cơ sở dữ liệu. Một cách tiếp cận có thể tôi có thể đề nghị là ánh xạ các tên trường trong mã ứng dụng khi bạn định làm nó.Nhưng sau đó sớm hay muộn bạn phải bắt đầu xử lý sự điên rồ này với tên trường và sửa nó. Nó không phải là ý tưởng tốt chỉ để màn hình từ một vấn đề và tưởng tượng rằng nó là một giải pháp an toàn và cách tốt để đi. Đó chỉ là giải pháp tạm thời. Đừng tự hỏi về nó.
Đúng. Kế hoạch ở đây là để cuối cùng có được khách hàng để có được truy cập và cho chúng tôi di chuyển tất cả các dữ liệu đến một cơ sở dữ liệu phong nha, nơi chúng tôi có thể viện một lược đồ hơi điên ít hơn. –
- 1. Đi bộ mảng đệ quy và in đường đi bộ
- 2. Xóa đường viền mỏng xung quanh đường đi bộ
- 3. đế và bộ thu gom rác Đi
- 4. Tuyến đường/lối đi/đường tùy chỉnh trên Google Maps
- 5. StateListDrawable và lát gạch bitmap
- 6. Câu hỏi hiệu suất: String.split và sau đó đi bộ trên mảng, hoặc RegExp?
- 7. nhân vật trái phép trên đường đi cho gói NuGet
- 8. Bố cục lát bằng CSS và HTML
- 9. Tránh đường giữa các hình SVG lát gạch
- 10. C# nhận được đường đi của% AppData%
- 11. Đi qua lát một mảng tĩnh/động bằng cách tham chiếu với điểm bắt đầu và chiều dài specifier
- 12. Tính số đường đi qua biểu đồ
- 13. Ruby, nhận được đường đi từ đường + filename
- 14. Chuỗi bất biến của Python và các lát của chúng
- 15. Mạngx - Chiều dài đường đi ngắn nhất
- 16. Rails bỏ qua tuyến đường bộ sưu tập và đi với chương trình hành động thay vì
- 17. kênh chặn và thông báo không đồng bộ đi qua
- 18. Tại sao phát hiện đường dẫn A * đôi khi đi theo đường thẳng và đôi khi là đường chéo? (Java)
- 19. Điểm số cao trong lưới đi bộ
- 20. Đường đi shebang phù hợp là gì?
- 21. Tìm đường đi ngắn nhất với FGL
- 22. Cách MVC4 sử dụng đường dẫn ảo đi kèm?
- 23. Vẽ đường thẳng giữa mô hình và Bộ điều khiển
- 24. Đường trục đi qua một mô hình tới Bộ định tuyến
- 25. Đi bộ một cây XML trong C#
- 26. hủy bỏ hiệu lực một đường đi từ bộ nhớ cache Django đệ quy
- 27. gấu trúc đi bộ ngẫu nhiên
- 28. Chuỗi Cắt lát Python
- 29. Tìm tất cả các đường đi ngắn nhất từ mọi cặp nút trên biểu đồ
- 30. Tìm đường đi ngắn nhất giữa hai điểm trên lưới, sử dụng Haskell
+1 cho "giới tính" giữ ngày – inspite
+1 Tương tự như trên. Kỳ lạ nhất! – Ace