OOP基础 - C#重构?
(抱歉,如果标题是不恰当的,不知道如何正确字的问题)OOP基础 - C#重构?
一个User
(人)拥有Property
(一所房子,街道地址等)。
我正在重构一个项目,并且有以下情况。我有一个名为Property
的课程和一个名为User
的课程。
业务规则:用户具有一个或多个属性。
那么,什么更有意义:
User.GetProperties()
或
Properties.Get(userId)
目前我通过User
访问类的属性。不知道这是否是处理这种关系的常用方式。你们是怎么想的?
我想在这里向前和关注的原因是因为我稍后会:
Property.Get(state)
Property.Get(zip)
Property.Get(city)
Property.Get(numberOfBedroom)
等。 。
其他获取房产的方法和我知道这些将通过Property
类访问。对? (我对此坚定不移),这是否改变了如何访问用户的属性?
更新
我不问如何正确地创建的类,就像我说我有两个班。我的问题,更好地说,就是:
使我的网页API,对于给定的情景(User
有一个或多个Property
[IES):
/api/user/properties/{userId} // get all user properties
或
api/property/user/{userId} // get all user properties
因为我明确将实施:
api/property/zip/{zipCode} // get all properties by zip
api/property/state/{state} // get all properties by state
api/property/city/{city} // get all properties by city
等
因此,考虑到过去的3个例子,你会
(一)实施/api/user/properties/{userId}
同时实现所有api/property/...
为后来3箱子
或
(b)保持一致并从api/property/user/...
的角度查询User
的Property
[ies]?
然后,回答这个问题后,我仍然有User
类与GetProperties()
方法返回List<Property>
或
我可以有Property
类与GetByUser(int userId)
方法返回List<Property>
因为在现实世界中User
有1个或更多Property
而不是相反。所以我们的基本OOP本能就是对它进行建模,但是当考虑WebApi和一个可能公开暴露的API时,我认为后者是首选,但是从C#(服务器端)获取User
的Propert
是什么使得但我的前端开发人员(jQuery,Angular,JavaScript等)需要流畅的API,api/property/user/...
可能是合乎逻辑的,我可能不认为要看api/user/propties/...
(或我可能)...
那么,您将使用哪种API方法以及为什么,以及您将使用哪种类模型以及为什么。
谢谢。
更新2
(心里对自己说)“答案可能是既”创建API的OOP正确性和api/property/user/...
两种方式api/user/properties/...
了一口流利的API,并有两个调用同一个类的方法?对?
您正在混合2个独立的东西:您的实体(人员,财产)和您的业务逻辑。在我看来,你应该有Person和and Property类,而Person类将有一个属性集合,但是业务逻辑应该转到一个单独的组件,即PropertyComponent(或只是PropertyRepo)将具有方法GetPropertiesByState,GetPropertiesByUser等。
其余应该使用资源标识符来标识资源。在我看来,API的结构应该是
/api/users/ --> Get all users
/api/users/{userId} --> Ger one user
/api/users/{userId}/properties/ --> Get properties of one user
/api/users/{userId}/properties/{propertyid} --> Get one property of one user
获得性能
/api/properties/ --> Get all properties
/api/properties/{propertyid} --> Get one properties
/api/properties?filter=(zip:zipCodeValue) --> Get all properties by zip code
/api/properties?filter=(state:stateValue) --> Get all properties by state
休息https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
有用的参考看来你的业务规则较为复杂:有属性描述符的列表,用户可以拥有这些描述符的一个或多个属性值。这是真的吗? –
关闭袖口猜测 - 与跟踪/识别用户相比,您对追踪/识别属性更感兴趣。在我看来,你的API应该是关于属性,以及获取你关心的属性集合的各种方法,而不是关于用户,ZIP或状态。总之,我认为api/properties/[属性/ {[属性值]}的某些属性会产生一个相对干净,易于理解的格式。 –
更新,否“用户(一个人)拥有一个房产(房子,街道地址等)。” –