【问题标题】:How to choose the correct architecture for my PHP classes?如何为我的 PHP 类选择正确的架构?
【发布时间】:2014-03-17 04:22:36
【问题描述】:

这是我自己构建的第一个网络应用程序。

在编码之前,我喜欢整理我的想法,做类和需求图。

所以我必须在我的软件中这样做

-添加用户。 - 添加买单。

我以两种不同的方式思考我的课程。

像这样:

class User{
    function add()
    function edit()
}

class BuyOrder{
    function add()
    function edit()
}

或者

class Add{
   function user()
   function buyOrder()
}

class Edit{
    function user()
    function buyOrder()
}

如您所见,他们会做同样的事情,但写作方式不同。

有什么想法吗?

谢谢

【问题讨论】:

  • 这不是设计模式。这是一个架构问题。
  • 你的方法都是错误的。 User 现在不应该添加或编辑自身。 AddEdit 类很奇怪,但我知道您尝试了与第一种方法相反的方法。在你的第二种情况下,想象你有很多东西要添加。你的班级很快就会失控。编写类时始终牢记单一职责原则。您最终可能会学习很多课程,但至少它们是易于管理的。

标签: php architecture


【解决方案1】:
public class User 
{
   public Guid Id { get; set; }
   public string Name { get; set; }
   pubic string LastName { get; set; }
   public byte Age { get; set; }
   public List<Order> Orders { get; set; }
}

public class Order 
{
   public Guid Id { get; set; }
   public decimal Price { get; set; }
   public bool IsAvailable { get; set; }
}

public class Service 
{
   public User Create(User user) { };
   public User Read(Guid id) { };
   public void Update(User user) { };
   public void Delete(Guid id) { };

   public Order Create(Order order) { };
   public Order Read(Guid id) { };
   public void Update(Order order) { };
   public void Delete(Guid id) { };


   // Add orders to user basket
   public void AddOrdersToUserBasket(List<Order> orders, User user) { }; 
   public void AddOrdersToUserBasket(List<Order> orders, Guid id) { };

   // Get all orders of current user
   public List<Order> ReadOrdersForUser (Guid id) { };

   // Send orders and user data to process a delivery.
   public void Send ProcessOrdersAndUserData(List<Order> orders, User user) { };
}

你可以使用 some wrapper 代替 void 作为返回值:

public class Answer 
{
   public bool Result { get; set; }
   public string Message { get; set; }
}

并且需要将服务划分为UserService、OrderService和ProcessService。

【讨论】:

  • 为什么不立即将Service 重构到各自的服务中?
【解决方案2】:

我认为 User 和 BuyOrder 应该是一个类。

但是,让 add 函数成为这些类的一部分对我来说没有意义,因为有效地创建这些类的新实例就是 add。

相反,我会创建 AddUser 和 AddOrder 函数来创建实例并将它们正确添加到需要的位置。

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2019-03-27
    • 2017-09-18
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2018-08-24
    • 1970-01-01
    相关资源
    最近更新 更多