RE: How to know either to use classes or table level changes
If you want to throw an error when changing a value of of table field, you don't have many options. You need to use validateField() method on the table. Of course, you can call a class from this table method, if you have a reason to do it. And that's what happened in this case - validateField() (indirectly) calls validateField() method of SalesTableType class.
Also, you should still put the validation on saving as well (validateWrite()), because validateField() typically isn't called if data is change in another way thay through GUI.