2010-03-27 19 views
6

Tôi đã quyết định phát triển một ứng dụng web dựa trên cơ sở dữ liệu, nhưng tôi không chắc bắt đầu từ đâu. Mục tiêu cuối cùng của dự án là ba lần:Bắt đầu từ đâu với sự phát triển của ứng dụng web cơ sở dữ liệu hướng đầu tiên (câu hỏi dài)?

  1. học công nghệ và thông lệ mới,
  2. cung cấp một bản demo không được yêu cầu để quản lý mà sẽ hiển thị như thế nào thông tin mà các cửa hàng công ty như tài liệu văn phòng lây lan qua mạng cồng kềnh cấu trúc thư mục có thể được hợp nhất và dễ dàng truy cập và duy trì và
  3. chỉ cho các đồng nghiệp của tôi cách Phát triển và tạo mẫu thử nghiệm qua sơ đồ lớp có thể rất hữu ích và giảm đau đầu trong tương lai.

Tôi nghĩ điều này sẽ trở thành CMS cơ bản mà tôi đã tạo một tập hợp các tính năng, xem bên dưới.

  1. Tạo cơ sở dữ liệu để lưu trữ cấu trúc trang web (được tổ chức dưới dạng cây có 'nhóm dự án' -> cấu trúc dự án).
  2. Kéo cấu trúc trang web từ cơ sở dữ liệu và hiển thị dưới dạng cây bằng công nghệ giao diện người dùng cơ bản.
  3. Thêm đặc quyền/công cụ của quản trị viên để sửa đổi cấu trúc trang web.
  4. Tự động tạo các trang phụ được yêu cầu * khi quản trị viên thêm dự án mới.
    4.1 Sẽ có một số trang phụ trong mỗi dự án và nội dung cho mỗi trang phụ khác nhau.
  5. thêm đặc quyền của người dùng để chỉ định quyền đọc và ghi cho trang phụ.

Điều tôi muốn làm là sử dụng Phát triển theo hướng thử nghiệm và sơ đồ lớp như một phần trong quy trình của tôi để phát triển dự án này. Vấn đề của tôi; Tôi không chắc bắt đầu từ đâu. Tôi đã đọc về Bài kiểm tra đơn vị và UML, nhưng chưa bao giờ sử dụng chúng trong thực tế. Ngoài ra, trước đây chưa bao giờ làm việc với cơ sở dữ liệu, làm cách nào để kết hợp các mục này vào các mô hình và các đơn vị kiểm tra?

Cảm ơn tất cả trước vì chuyên môn của bạn.

+0

bạn có thể bắt đầu thử nghiệm đơn vị cho mã tiếp theo bạn viết! kiểm tra đơn vị không phụ thuộc vào bất cứ điều gì. bạn chỉ cần 'mã kiểm thử', điều này đưa ra các xác nhận về 'mã thử nghiệm'. xem http://en.wikipedia.org/wiki/Unit_testing – Karussell

Trả lời

6

Tôi không biết bắt đầu từ đâu.

Chúng tôi luôn bắt đầu với mô hình dữ liệu.

đã không bao giờ làm việc với cơ sở dữ liệu trước đó, làm thế nào để tôi kết hợp các mặt hàng này vào các mô hình và thử nghiệm đơn vị?

Ah, vâng, có vấn đề.

Bạn phải bắt đầu với dữ liệu, bởi vì mọi thứ bắt đầu bằng dữ liệu.

  1. Viết trường hợp sử dụng. 5 yêu cầu kỹ thuật của bạn không thực sự là trường hợp sử dụng rất tốt vì không có diễn viên nào tương tác với một hệ thống. Bạn cần phải viết ra những điều mà một diễn viên làm - những gì diễn viên tương tác với.

  2. Xác định các đối tượng mà tác nhân tương tác. Khi nghi ngờ, hãy ghi lại tất cả các danh từ trong các trường hợp sử dụng của bạn.

  3. Vẽ ảnh của các lớp sẽ triển khai các đối tượng đó.

  4. Đi qua các trường hợp sử dụng của bạn để đảm bảo rằng tất cả những điều mà một diễn viên cần làm là dựa trên các thuộc tính của định nghĩa lớp học của bạn. Tất cả dữ liệu mà một diễn viên cần phải có trong các lớp này, mà sẽ trở thành các bảng trong cơ sở dữ liệu của bạn.

Bây giờ, bạn phải bắt đầu thực hiện công việc kỹ thuật hơn. Bạn cần một khung công tác web với một lớp ORM. Bạn đang sử dụng PHP, vì vậy bạn sẽ phải tìm một khung tốt cho việc này. Bánh hay giáo lý hay gì đó.

  1. Xác định một lớp trong lớp ORM của bạn. Bạn không cần phải hoàn thành hoặc chính xác, bạn chỉ cần một cái gì đó mà bạn có thể thử nghiệm với.

  2. Viết các kiểm tra đơn vị cho lớp này để đảm bảo rằng nó có các phần tử dữ liệu phù hợp. Điều này sẽ tương đối đơn giản lúc đầu, vì các lớp dữ liệu cá nhân của bạn sẽ bắt đầu đơn giản.

Khi tập hợp các lớp cơ bản được xác định, bạn sẽ cần phải xem xét mối quan hệ giữa các lớp. Đây là nơi công việc thực sự bắt đầu.

  1. Nhìn vào mối quan hệ trong ảnh của bạn. Bất kỳ dòng nào. Chọn một cách ngẫu nhiên.

  2. Viết kiểm tra đơn vị để đảm bảo rằng bạn có thể "điều hướng" trên dòng đó. Từ một đối tượng, tìm nạp các đối tượng liên quan ở đầu kia của dòng. Điều này không quá phức tạp, chỉ một vài dòng mã.

  3. Tạo "vật cố" - dữ liệu thử nghiệm bạn có thể tải vào cơ sở dữ liệu - để đại diện cho các đối tượng và mối quan hệ của chúng.

  4. Chạy thử nghiệm. Nếu nó bị hỏng, hãy cập nhật định nghĩa ORM của bạn để hỗ trợ điều hướng đúng cách.

Khi bạn hoàn thành tất cả các mối quan hệ khác nhau, bạn sẽ xây dựng mô hình dữ liệu hoàn chỉnh hợp lý theo cách Kiểm tra.

Bây giờ bạn có thể xây dựng bản trình bày PHP của bạn cho các đối tượng mô hình.

+0

Tôi thường không thích bắt đầu với mô hình dữ liệu - tôi nghĩ nó dẫn bạn đến một mô hình miền thiếu máu - nhưng bạn đặt ra một phiên thiết kế khá tốt. –

+1

@Mark Brackett: "thiếu máu"? Làm thế nào bạn có thể bắt đầu với bất cứ điều gì khác? Nếu bạn bắt đầu với bản trình bày GUI, mô hình dữ liệu của bạn trở thành một băm khó hiểu dựa trên một bản trình bày cụ thể và bất kỳ thay đổi nhỏ nào đối với bản trình bày đó sẽ phá vỡ mô hình. Mô hình dữ liệu là nền tảng cho mọi thứ. Những gì bạn có thể có nghĩa là "thiếu máu"? –

+0

@ S.Lott - Cá nhân, tôi thấy rằng giao diện người dùng hoặc tên miền đầu tiên là tốt hơn để xác định hành vi. Dữ liệu đầu tiên, IME, dẫn đến một mô hình "tên miền" nhỏ hơn nhiều so với getters/setters - thường là các mối quan hệ không cần thiết và phức tạp giữa chúng. Khi buộc phải thêm hành vi - nó có xu hướng đi vào dịch vụ, bộ điều khiển hoặc procs được lưu trữ. –

7

Tôi có cảm giác rằng bạn đang cố gắng lấy quá nhiều cùng một lúc. Nó là tốt để thử nghiệm với cơ sở dữ liệu, sơ đồ TDD và UML; rằng bản thân IMHO sẽ đủ cho một dự án duy nhất. Dự án thử nghiệm đầu tiên này sẽ dạy bạn rất nhiều, dựa trên đó bạn sẽ có thể thực hiện một công việc tốt hơn cho dự án tiếp theo. Nhưng tôi sẽ không mong đợi điều này đầu tiên cố gắng mang lại kết quả mà có thể thuyết phục các nhà phát triển khác để nhận TDD, và/hoặc quản lý để thay đổi cách suy nghĩ của mình. Bạn cần phải hiểu và trải nghiệm mọi thứ ngay từ đầu, trước khi bạn có thể giải thích một cách hợp lý cho người khác.

Để được tư vấn về các ứng dụng DB kiểm tra đơn vị, xem các chủ đề cho người mới bắt đầu:

Tôi không chắc chắn những gì bạn có ý nghĩa bằng cách "tạo mẫu qua sơ đồ lớp". Sơ đồ lớp là tốt để thảo luận/truyền đạt thiết kế của bạn cho các nhà phát triển khác, và chắc chắn phải ở trong bộ công cụ của mọi nhà phát triển giỏi.Một phiên họp bảng trắng với ai đó, phác thảo và xóa các yếu tố thiết kế trên bay là một cách tuyệt vời để làm rõ thiết kế và các lực lượng ảnh hưởng đến nó. Tuy nhiên, IMHO này là "tạo mẫu" chỉ theo nghĩa rất rộng. Một nguyên mẫu thực sự với tôi là mã - đó là cách duy nhất để xác minh xem thiết kế của bạn có thực sự hoạt động trong thực tế hay không.

2

Đầu tiên là xương sống của bất kỳ ứng dụng web nào là cơ sở dữ liệu. Tôi sẽ đề nghị bắt đầu đơn giản, thực hiện thiết kế cơ sở dữ liệu và sau đó viết mô hình và xem các lớp để hiển thị chúng. Thứ hai, bạn nên thiết kế DB của bạn với mục tiêu của bạn trong tâm trí (các trang con, cấu trúc cây) nhưng đừng sợ mắc lỗi. Chúng tôi có thể khoan bạn về bình thường hóa hoặc lợi ích của việc sử dụng một mô hình quan hệ đối tượng nhưng nếu cá nhân bạn không thấy sự cần thiết cho những người đó, sẽ rất khó để nội tâm hóa các khái niệm.

TDD có thể được sử dụng từ ngày đầu tiên, khi bạn kiểm tra mô hình và xem các lớp của DB. UML Tôi không chắc chắn nó sẽ hữu ích - nếu có thể chỉ cần dính vào các biểu đồ trình tự, lớp và cộng tác.

Câu trả lời cụ thể cho việc sử dụng DB trong kiểm tra đơn vị - chèn các hàng giả trong khi thiết lập và xóa chúng trong các giai đoạn teardown. Bạn có thể muốn viết một kịch bản PHP để "dọn sạch" một DB sau khi thử nghiệm.

Hy vọng điều này sẽ hữu ích!

1

Điều tôi muốn làm là sử dụng Phát triển theo hướng thử nghiệm và sơ đồ lớp như một phần trong quy trình của tôi để phát triển dự án này.

Đó là 2 cách tiếp cận khác nhau để thiết kế - bạn cần chọn một phương pháp. TDD điều khiển thiết kế dựa trên hành vi và kiểm tra. UML có xu hướng được sử dụng trong BDUF (Big Design Up Front) - mặc dù nó có thể được sử dụng chỉ để giao tiếp không chính thức giữa các dev mà không phải là một phần của "thiết kế". Tóm lại, mặc dù - là bạn cần phải quyết định cách bạn muốn thiết kế phần mềm của mình. Đối với tôi, tôi thường cảm thấy thoải mái hơn với cách tiếp cận TDD - nhưng đối với một tên miền nổi tiếng, tôi có thể làm phiên BDUF thay vì (mặc dù tôi không sử dụng UML).

Vấn đề của tôi; Tôi không chắc bắt đầu từ đâu. Tôi đã đọc về Bài kiểm tra đơn vị và UML, nhưng chưa bao giờ sử dụng chúng trong thực tế.

Giả sử bạn đang nói [T | B] DD chứ không phải "kiểm tra đơn vị" - bạn bắt đầu với các bài kiểm tra chứng minh hành vi bạn cần cho đơn đăng ký của mình. Nếu bạn đi theo tuyến đường [T | B] DD, tôi có thể bỏ qua hoàn toàn UML. Nếu không, chỉ cần chạy một trình tạo UML khi bạn đã hoàn thành và nó sẽ làm cho bạn một số hình ảnh đẹp. ;)

[TestFixture] 
public class WhenAddingNewProject { 
    [Test] 
    public void SubPagesAreCreated() { 
     var p = Project.Create("MyProjectGroup\\MyTestProject"); 

     Assert.IsGreaterThan(p.SubPages.Count, 0); 
    } 

    [Test] 
    public void FirstSubPageIsWikiPage() { 
     var p = CreateProject(); 
     var subPage = p.SubPages[0]; 

     Assert.AreEqual(subPage.Title == "MyTestProject Wiki"); 
     Assert.IsTypeOf<WikiSubPage>(subPage); 
    } 

    [Test(ExpectedException := typeof(SecurityException))] 
    public void DefaultsToAdministratorPrivileges() { 
     var p = CreateProject(); 

     var u = User.Login("testuser", "testpassword"); 
     Assert.IsNotNull(u); 
     Assert.AreEqual(UserRole.User, u.Role); 

     p.Delete(); 
     Assert.Fail(); 
    } 

    private Project CreateProject() { 
     return Project.Create("MyProjectGroup\\MyTestProject"); 
    } 
} 

Ngoài ra, đã không bao giờ làm việc với cơ sở dữ liệu trước đó, làm thế nào để tôi kết hợp chặt chẽ các mặt hàng này vào các mô hình và các đơn vị kiểm tra?

Bạn không. Theo định nghĩa, nếu bạn đang nhấn cơ sở dữ liệu - bạn đang chạy thử nghiệm tích hợp, không phải là một thử nghiệm đơn vị. Đối với các bài kiểm tra đơn vị, bạn muốn trừu tượng hóa cơ sở dữ liệu và bỏ qua/mock/thay thế nó. Bằng cách lấy logic của bạn ra khỏi cơ sở dữ liệu, bạn có thể kiểm tra nó một cách riêng biệt - sau đó bạn chỉ cần kiểm tra việc tải/lưu dữ liệu của bạn (bạn đang sử dụng ORM, phải không?).

1

Tại sao không bắt đầu với một sơ đồ lớp? Bạn lập mô hình ứng dụng của mình sau đó tạo mã java bằng chú thích JPA trực tiếp từ mô hình (ví dụ: các khuôn mẫu cũng là chú thích) và cuối cùng bạn sử dụng trình lập bản đồ Hibernate/EJB 3 để tạo cơ sở dữ liệu của bạn.

Các vấn đề liên quan